So versuche ich, die Sitzungsvariable von meinem Hauptformular (LayoutForm) an das Verbindungsformular (ConDevForm) übergeben. Hier ist der vollständige Code für meine beiden Formulare. Ich habe versucht, die Lösung von @LarsTech dafür zu verwenden. Aber ich habe versagt.Wie übergeben Parameter ByRef zu einem Formular in VB.net
Ich erstelle die Sitzungsvariable in LayoutForm und übergebe sie dann mit Verweis auf ConDevForm. Sobald ConDevForm geschlossen ist, verwende ich den Menüpunkt in LayoutForm, um mit dem verbundenen Gerät zu interagieren, um zu überprüfen, ob ich die Kontrolle über die Session über die 'Session'-Variable habe.
Dies funktioniert: Hauptformular
Imports NationalInstruments.VisaNS
Imports System.Text
Public Class LayoutForm
Dim SGFreq As Double = Nothing
Dim Session As rssmb = Nothing
Private Sub SMB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SMB.Click
Dim Connect As New ConDevForm(Session)
Connect.WindowState = FormWindowState.Normal
Connect.Show()
End Sub
Private Sub MSingle_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MSingle.Click
Session.GetRFFrequency(SGFreq)
SGFreq = SGFreq + 1000000000.0
Session.confRFFreq(SGFreq, 0, 0, 0)
End Sub
End Class
Verbindungsform
Imports NationalInstruments.VisaNS
Imports System.Text
Public Class ConDevForm
Private sesn As rssmb
Public Sub New(ByRef sesn As rssmb)
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
Me.sesn = sesn
Try
UseWaitCursor = True
System.Windows.Forms.Cursor.Current = Cursors.WaitCursor
If sesn Is Nothing Then
sesn = New rssmb("TCPIP::192.168.138.100::INSTR", 0, 1)
sesn.confRFFreq(1000 * 1000000.0, 0, 0, 0)
sesn.confRFLevel(0, 0, 0, 0, 0, 0, 0)
End If
Catch ex As System.Runtime.InteropServices.ExternalException
Dim message As String
message = "Instrument Status Error: " + ex.Message + Environment.NewLine
message += "Instrument Error Code: " + ex.ErrorCode.ToString("X")
MessageBox.Show(message)
Finally
System.Windows.Forms.Cursor.Current = Cursors.Default
UseWaitCursor = False
End Try
End Sub
Private Sub Connect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Connect.Click
End Sub
End Class
Aber dies bedeutet nicht
Imports NationalInstruments.VisaNS
Imports System.Text
Public Class ConDevForm
Private sesn As rssmb
Public Sub New(ByRef sesn As rssmb)
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
Me.sesn = sesn
Try
UseWaitCursor = True
System.Windows.Forms.Cursor.Current = Cursors.WaitCursor
If Me.sesn Is Nothing Then
Me.sesn = New rssmb("TCPIP::192.168.138.100::INSTR", 0, 1)
Me.sesn.confRFFreq(1000 * 1000000.0, 0, 0, 0)
Me.sesn.confRFLevel(0, 0, 0, 0, 0, 0, 0)
End If
Catch ex As System.Runtime.InteropServices.ExternalException
Dim message As String
message = "Instrument Status Error: " + ex.Message + Environment.NewLine
message += "Instrument Error Code: " + ex.ErrorCode.ToString("X")
MessageBox.Show(message)
Finally
System.Windows.Forms.Cursor.Current = Cursors.Default
UseWaitCursor = False
End Try
End Sub
Private Sub Connect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Connect.Click
End Sub
End Class
Unter welchen Umständen ist 'Wenn Me.sesn Is Nothing Then'? Dein Code scheint nur sesn zu verwenden, wenn es nichts ist. – LarsTech
Oh, das ist nur um sicherzustellen, dass die Variable kein Handle für eine bestehende/aktive Sitzung ist. Im Moment seit ich es wie folgt erklärt habe 'Dim Session As rssmb = Nichts' Die Bedingung sollte immer wahr sein. Wenn die Dinge von hier weitergehen und ich weitere Funktionen hinzufügen kann, wird das hoffentlich Sinn machen. Wie auch immer die Verbindung zustande kommt, auch wenn ich Me.sesn oder sesn benutze. Das Problem ist, wenn ich zu LayoutForm zurückkomme, kann ich nicht mit dem Gerät interagieren, indem ich 'Session' benutze, wenn ich 'Me.sesn' in ConDevForm benutzt habe. –