2016-07-12 28 views
0

Ich bin ein Problem mit VB.NET mit:einen Unter von anderen Formen Aufruf gibt unterschiedliche Ergebnisse

Ich habe 3 verschiedene Formen bekommt (Public Class): Mainform, plotForm und trade.

Beide plotForm und eine Untertrade zu nennen, die einen Teil von Mainform, genannt SendHost:

Public Class mainForm 
    Public Sub SendHost(Text As String) 
     Dim OutData() As Byte = Encoding.Unicode.GetBytes(Text) 
     Client.BeginSend(OutData, 0, OutData.Length, SocketFlags.None, New AsyncCallback(AddressOf OnSend), Client) 
    End Sub 
End Class 

Wenn von plotForm Aufruf, gibt es kein Problem:

Public Class plotForm 
    Private Sub btnBuy_Click(sender As Object, e As EventArgs) Handles btnBuy.Click 
     mainForm.SendHost("GBuy§" & Prop.PositionID) 
     ''' Another code here....  
    End Sub 
End Class 

Wenn jedoch die gleiche Sub wird von einem anderen Sub namens Trade aufgerufen, gibt es ein Problem:

Dies wird das Sub in MainForm starten, aber Visual Studio sagt mir, dass "Client" Null ist, geben Sie mir eine NullReferenceExpection. Dies passiert nicht mit btnBuy_Click. Ich verstehe das nicht, und Hinweise auf eine Lösung sind sehr willkommen! Vielen Dank! Fühlen Sie sich frei, etwas zu fragen.

plotForm und trade gestartet wie (in Mainform, verschiedene U-Boote):

Dim TradeW As New Trade 
TradeW.ShowDialog(Me) 

und:

Dim plotbox As New PlotBox 
plotbox.ShowDialog(Me) 
+0

Mögliche Duplikate von [Was ist eine NullReferenceException, und wie behebe ich es?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix -it) – Enigmativity

+0

Sie weisen darauf hin, "wo wird' Client' instanziiert? " – Enigmativity

+0

Der Client ist ein Teil von mainForm, Initialisiert bei der Erstellung. Dim-Client als Socket Es ist mit dem Remote-Host verbunden und beginnt mit dem Senden von Daten am SendHost-Sub. –

Antwort

0

Ich denke, Ihr Hauptproblem war, dass irgendwo Sie die falsche Abholung wurden (oder neue Instanz) von mainForm. Sie verwenden die freigegebene Instanz mainForm, die eine völlig schlechte Idee ist. Ich weiß nicht, warum dieses Feature jemals in VB.NET eingeführt wurde - es führt nur zu solchen Fehlern.

Ich landete Ihr Projekt herunterladen und im Grunde umbenannt manuell die Klasse mainForm-mainFormClass und stellte dann diesen Code in Ihren Klassen, bis Ihr Projekt zusammengestellt:

Dim mainForm As mainFormClass 

Public Sub New(mainForm As mainFormClass) 

    ' This call is required by the designer. 
    InitializeComponent() 

    ' Add any initialization after the InitializeComponent() call. 

    Me.mainForm = mainForm 

End Sub 

Ich musste dann jede Form die Instanziierung ändern sei wie Dim propW As New PlotBox(Me.mainForm) oder Dim plotbox As New PlotBox(Me) je nachdem, wo die Klasse gemacht wurde.

Ich habe alles zu kompilieren, aber ich konnte nicht feststellen, ob Ihr Fehler behoben wurde, aber ich nehme an, dass es war.