2009-04-12 11 views
3

Ich unterrichte mich VB.Net.VB.NET: Was ist der beste Weg, um einen Wert von einem zweiten Formular abzurufen?

Hier ist ein Problem, das ich kürzlich gestoßen bin. Angenommen, ich habe eine Hauptform1 in meiner Anwendung. Form1 ruft eine zweite LoginForm auf, die (wie der Name schon sagt) ein Login-Fenster mit Benutzernamen/Passwort-Typ-Feldern ist. Das erwartete Verhalten besteht darin, dass LoginForm Anmeldedetails erfasst und sie an Form1 zurückgibt.

Was ist der beste Weg, dies zu tun?

In meinen Gedanken dachte ich an einen Funktionsaufruf wie "doLogin", der das LoginForm "zeigt", die eingegebenen Daten erfasst, das Formular entsorgt und die Zugangsdaten zurückgibt (wahrscheinlich in irgendeiner Art von Bohne). Irgendwie sehe ich das nicht als möglich

Was ich derzeit habe, ist weniger elegant. LoginForm wird von Form1 modal (d. H. ShowDialog) angezeigt; Eine 'ich'-Referenz wird an das zweite Fenster übergeben. Nachdem Benutzereingaben auf LoginForm empfangen wurden, setze ich einen Wert auf Form1, dann entsorgen.

Ist das so, wie jeder es macht?

Antwort

1

Ich habe immer in einem Delegaten an die zweite Form übergeben, die aufgerufen werden kann, um die Werte von der zweiten Form in die erste "zurückgeben".

Auf diese Weise vermeiden Sie jede enge Kopplung.

Klassische Beobachter Muster.


Eine beispielhafte Implementierung ist wie folgt:

einen Delegaten Signatur zu Form1 hinzufügen. Aktivieren Sie in Form1 die Schaltfläche Click-Ereignishandler, um die Form2-Klasse und den Delegaten von Form1 instanziieren. Weisen Sie eine Funktion von Form2 an den Delegaten, und rufen Sie den Delegierten:

'Form1.vb 
Public Delegate Sub delPassData(ByVal text As TextBox) 

Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click 
    Dim frm As Form2 = New Form2 
    Dim del As delPassData = New delPassData(AddressOf frm.funData) 
    del(Me.textBox1) 
    frm.Show() 
End Sub 

In Form2, fügen Sie eine Funktion, auf die der Delegat verweisen. Diese Funktion weist text1 den Text label1 zu.

'Form2.vb 
Public Sub funData(ByVal text As TextBox) 
    label1.Text = text.Text 
End Sub 

Um Daten zurück zu Form1 passieren, nur funData eine Funktion machen, dass Sie die gewünschten Werte zurückgibt.

+0

Vorsicht mit einem Codebeispiel? – Cerebrus

+0

gewählt für den großen Artikel. Vielen Dank –

0

Sie können auch Daten in VB.NET abrufen mit "My.Forms"

Die unten nimmt den Text aus einem Textfeld in der LoginForm und fügt es in ein Textfeld im Hauptformular ein.

Me.RetrievedDataTextBox.Text = My.Forms.LoginForm.Textbox1.Text