[vb.net] Rückgabewert eines Formulars

Gepostet am: May 11, 2011 3:14:33 PM

Wie implementiert man am besten, dass ein Formular einen Rückgabewert liefert. In der Praxis hat sich am besten folgender Weg behauptet. Man statte das neue Formular mit einem Public ReadOnlyProperty aus, den man nach Schließen des Formulars abfragt. In den meisten Fällen ist gewünscht, dass das Formular, das einen Rückgabewert liefern soll, während der Eingabe im Vordergrund bleibt und die anderen Fenster blockiert. Daher wird das Formular mittels ShowDialog aufgerufen. 

Aufruf des Formulars, das einen Rückgabewert liefern soll, mittels ShowDialog

Formular2.ShowDialog()

Im Formular2, dass einen Rückgabewert liefern soll, benötigen wir eine Private Variable, in der der Rückgabewert gespeichert werden soll und ein Public ReadOnly Property, dass man abfragen kann.

Formular2

Public Class Form2

    Private _myVar As String = string.empty

    Private Sub cmd_save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_save.Click

        Me. _myVar = Me.txt_Eingabe.Text

    End Sub

    'Properties

    Public ReadOnly Property myVar As String

        Get

            Return Me.myVar

        End Get

    End Property

End Class

Jetzt würde sich in diesem Public ReadOnlyProperty der Wert des Rückgabewertes (im konkreten Fall der Inhalt von Form2.txt_Eingabe) befinden, dem man lediglich vom Hauptformular abfragen muss. 

Formular1 - Aufruf Formular2 + Wertabfrage

Formular2.ShowDialog() Dim UebergabeVar as String = Formular2.myVar

Und nun hat man in der UebergaveVar den Wert des Rückgabewertes. Dies geht natürlich auch mit mehreren Variablen, und mit Variablen, die man an das Formular übergibt ... 

Problematischer ist die Sache, wenn man das Formular nicht mit ShowDialog sondern mit Show anzeigt. Dadurch werden die anderen Fenster nicht blockiert und die Übergebene Variable bleibt leer, da der Code des Formulars 1 einfach weiterläuft und zu Beginn - also nach dem Formularaufruf von Formular2 das Public ReadOnly Property noch leer ist. Dem kann man jedoch entgegenwirken, indem man sich beispielsweise einen Timer bastelt, davon würde ich persönlich jedoch abraten.