Using frm...

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Using frm...

    Hallo, und bitte nicht schlagen :)

    Vermutlich ist das eine saudumme Frage, aber ich bin mir trotzdem nicht im Klaren.

    In diesem Thread vb-paradise.de/index.php/Threa…ostID=1087344#post1087344

    wird in einem der Beispielsprojekte zum Aufruf einer modalen Form dies verwandt:

    VB.NET-Quellcode

    1. using frm = New frmaaaa(Me)
    2. Dim result = frm.ShowDialog()
    ,

    Was ist der Unterschied zu

    VB.NET-Quellcode

    1. using frm = New frmaaa
    2. dim result = frm.ShowDialog()
    ?


    Beide Aufrufe funktionieren, wobei bei Verwendung von Me zusätzlich InitializeComponent() in der aufzurufenden Form gesetzt werden muss.

    Wann ist welche Variante sinnvoll?

    Danke für Antworten,
    Volkmar

    Volkmar schrieb:

    Was ist der Unterschied
    Fall 1 verwendet einen anderen Konstruktor als Fall 2.
    Klar, eine Form muss per InitializeComponent() aufgebaut werden.
    Ich denke mal, Du hast das verwechselt mit frm.ShowDialog() vs. frm.ShowDialog(Me), da wird explizit das Parent übergeben, was ggf. Auswirkungen auf Unterfenster und MessageBoxen haben kann.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Erst einmal Danke für Deine Mühe.

    Wenn ich

    VB.NET-Quellcode

    1. using frm = New frm1(Me)
    2. Dim result = frm.ShowDialog()
    verwende, dann habe ich in der Form, die geöffnet werden soll, zwingend dies:

    VB.NET-Quellcode

    1. Private _form1 As Form1
    2. ...
    3. Sub New(form1 As Form1)
    4. ' TODO: Complete member initialization
    5. _form1 = form1
    6. InitializeComponent()
    7. End Sub


    Die Zielform öffnet sich, egal ob ich das mit

    VB.NET-Quellcode

    1. Dim result = frm.ShowDialog()
    oder

    VB.NET-Quellcode

    1. Dim result = frm.ShowDialog(Me)
    aufrufe. Ist die Verwendung von Me hier dann fakultativ oder besteht da ein Unterschied?

    Wenn ich dagegen

    VB.NET-Quellcode

    1. using frm = New frm1
    2. dim result = frm.ShowDialog()


    verwende, brauche ich InitializeComponent in der Zielform nicht, das funktioniert dann auch ohne (Form öffnet sich).

    VB.NET-Quellcode

    1. Dim result = frm.ShowDialog(Me)
    geht in dem Fall aber nicht.

    Volkmar schrieb:

    brauche ich InitializeComponent in der Zielform nicht
    Das ist falsch :!:
    Jede Form, jedes UserControl benötigt InitializeComponents(), um sich selbst darzustellen.
    In VB.NET übernimmt das allerdings das VisualBasic-Framework, indem es den Standardkonstruktor ohne Parameter einfach nicht im Form-Code ausweist.

    Wenn Du Dir aber den Konstruktor generieren lässt:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Public Sub New()
    3. ' Dieser Aufruf ist für den Designer erforderlich.
    4. InitializeComponent()
    5. ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
    6. End Sub
    7. End Class
    steht dort selbstverständlich InitializeComponent() drinne.
    =====
    ShowDialog() vs. ShowDialog(Me)

    RodFromGermany schrieb:

    da wird explizit das Parent übergeben, was ggf. Auswirkungen auf Unterfenster und MessageBoxen haben kann.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!