Zwischen Formularen hin und her wechseln

  • Thema 1: Wechseln vom Projektstartformular zu einem anderen Formular

    Ich verwende den folgenden Code, der eine Instanz aufruft meines Zahlungsformulars (frmPayment) von meinem Startformular (frmMainMenu) über ein Klickereignis:

     Private Sub btnPayment_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPayment.Click, PaymentToolStripMenuItem.Click
            Dim frmPaymentX As New frmPayment() 'declare payment form
            Me.Visible = False
            frmPaymentX.ShowDialog() 
    End Sub
     

    Soll ich während meines Formularwechsels etwas anderes als Me.Visible = False verwenden, um mein Startformular (frmMainMenu) zu bearbeiten?

    Thema 2: Zurück zum Startformular

    Ebenso verwende ich den folgenden Code, um zu meinem Startformular (frmMainMenu) von meinem Zahlungsformular (frmPayment) zurückzukehren:

     Private Sub btnMainMenu_Click(ByVal sender As System.Object, ByVal e As 
    System.EventArgs) Handles btnMainMenu.Click
            frmMainMenu.Show()
            Me.Close()
    End Sub
     
    1. Soll ich mein Startup-Formular (frmMainMenu) direkt aufrufen, wie ich es gerade mache Mein Beispiel oder sollte ich eine Instanz meines Starup-Formulars (frmMainMenu) aufrufen?
    2. Ich glaube, dass ich show() und nicht showdialog() dafür verwenden sollte. Ist das richtig?
    3. Soll ich etwas anderes als Me.Close() verwenden?
    06 August 2015
    Jamal
2 answers
  • Zunächst müssen Sie klären, warum Sie das Zahlungsformular anzeigen und das Hauptformular ausblenden möchten. Wenn Sie in den meisten Anwendungen ein Dialogfeld mit einer Beschreibung anzeigen möchten, zeigen Sie es modal an (mithilfe von dialog.ShowDialog()), sodass es über dem aktuellen Formular angezeigt wird und der Benutzer daran gehindert wird, mit dem anderen Formular zu interagieren, bis es geöffnet wird Das Dialogfeld ist geschlossen.

    Wenn Sie Ihr aktuelles Hauptformular und Zahlungsdialogfeld als zwei Bildschirme anstelle eines Formulars und eines Dialogfelds anzeigen möchten, können Sie besser ein solches erstellen Schalenform, die ein UserControl enthalten kann. Sie können dann das Hauptformular und das Zahlungsformular aus zwei UserControl 's zusammenstellen und einfach umschalten, was in Ihrem Fenster angezeigt wird.

    11 November 2011
    Alex DugglebyPaul Stovell
  • Das versteckte Ding erscheint mir etwas seltsam. Im Allgemeinen interessiert es nicht, das Hauptformular zu verbergen. Wenn in der App zwischen "Seiten" gewechselt werden soll, ist ein Registerkartenbereich oder die Einrichtung eines Assistenten möglicherweise eine bessere Idee.

    Wie für Ihren vorhandenen Code (sollten Sie dies beibehalten?) it), im Hauptformular würde ich empfehlen

     Private Sub btnPayment_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles btnPayment.Click, PaymentToolStripMenuItem.Click
        ' use `Using` here to ensure the subform is disposed when we're done.
        ' `Close` doesn't dispose forms shown via `ShowDialog`.
        Using frmPaymentX As New frmPayment() 'declare payment form
            Me.Hide()  ' works like `Me.Visible = False`,but more OOPish IMO
            frmPaymentX.ShowDialog()
            Me.Show()  ' duh
        End Using
    End Sub
     

    Im Unterformular ...

     Private Sub btnMainMenu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles btnMainMenu.Click
        ' (don't worry about controlling the main form here; it'll take care of itself)
        Me.Close()
    End Sub
     

    Beachten Sie dies alles geht davon aus, dass das Unterformular tatsächlich ein Unterformular ist (und dass das erste aka 'main'-Formular die Dinge steuern soll). Wenn die beiden logisch unabhängig sind und gleichermaßen die Kontrolle übernehmen, ist es wahrscheinlich besser, Registerkarten oder einen Assistenten zu verwenden, je nachdem, zu welchem ​​sie passt (was nur Sie wissen würden, da die Benutzeroberfläche nicht in der Hand ist).

    11 November 2011
    Dan