Desöfteren kommt mir hier solch VB6-Kompatibilitäts-Zeugs entgegen:
Dies wird aufgerufen, weil es irgendwo steht (ich frage mich nur wo), weil es die jungen Kollegen (leider) falsch gezeigt bekommen oder weil es einfach, einfach VB6, ist.
Ich werde hier nicht auf die Unterschiede zwischen den 4 Aufrufen eingehen, nur soviel:
Diese Aufrufe sind möglich, weil VB.NET eine implizite Instanz des Dialogs erstellt und anzeigt, beim Verlassen der aufrufenden Prozedur wird sie wieder zerstört. Für VB6 mag das reichen, für .NET sollte es nicht mehr reichen.
2 einfache Beispiele, wo die VB6-Funktionalität nicht ausreicht, wo nur .NET helfen kann:
1. Wir wollen vom 2. Dialog aus ein Event zur MainForm senden.
Wenn wir in Form1 dür dieses Event einen Handler anlegen wollen, bekommen wir dies angeboten:
Da kommt Form2 nicht vor, weil Form2 der Name der Klasse, nicht aber der Name der Instanz ist.
Also müssen wir mit
Damit dies ordentlich funktioniert: nicht modaler Dialog, beliebig oft aufruf- und wieder schließbar, verwenden wir diesen Code:
nicht modaler Dialog
Den Eventhandler wie auf dem Bild:
Und nun los, Start, der Button öffnet den nicht modalen Dialog, und beim Drücken des Buttons in der 2. Form kommt die MessageBox im Hauptfenster.
Dies funktioniert mit
2. Wir wollen gleichzeitig 2 Mal den Dialog aufrufen.
Nichts leichter als das, mit dem
passiert nach Klick auf Button2 beim Klick auf Button3 dies:
Also schreiben wir analog zu oben folgenden Code:
nicht modaler Dialog 2
Nach Anpassung des Eventhandlers
können wir also von einer Formklasse mehrere Instanzen erstellen und mit ihnen kommunizieren:
Ich hoffe, nun können wir unter .NET das Ende des Un-Aufrufs
Die Begründung: Unter C# geht
Dies wird aufgerufen, weil es irgendwo steht (ich frage mich nur wo), weil es die jungen Kollegen (leider) falsch gezeigt bekommen oder weil es einfach, einfach VB6, ist.
Ich werde hier nicht auf die Unterschiede zwischen den 4 Aufrufen eingehen, nur soviel:
Show(x)
ruft einen nicht modalen Dialog, ShowDialog(x)
ruft einen modalen Dialog auf.Diese Aufrufe sind möglich, weil VB.NET eine implizite Instanz des Dialogs erstellt und anzeigt, beim Verlassen der aufrufenden Prozedur wird sie wieder zerstört. Für VB6 mag das reichen, für .NET sollte es nicht mehr reichen.
2 einfache Beispiele, wo die VB6-Funktionalität nicht ausreicht, wo nur .NET helfen kann:
1. Wir wollen vom 2. Dialog aus ein Event zur MainForm senden.
Wenn wir in Form1 dür dieses Event einen Handler anlegen wollen, bekommen wir dies angeboten:
Da kommt Form2 nicht vor, weil Form2 der Name der Klasse, nicht aber der Name der Instanz ist.
Also müssen wir mit
New
eine Instanz der Form2 erstellen.Damit dies ordentlich funktioniert: nicht modaler Dialog, beliebig oft aufruf- und wieder schließbar, verwenden wir diesen Code:
VB.NET-Quellcode
- Private WithEvents frm2 As Form2
- Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
- If frm2 Is Nothing OrElse frm2.IsDisposed Then
- frm2 = New Form2
- End If
- If Not frm2.Visible Then
- frm2.Show(Me)
- End If
- If frm2.WindowState = FormWindowState.Minimized Then
- frm2.WindowState = FormWindowState.Normal
- End If
- End Sub
Und nun los, Start, der Button öffnet den nicht modalen Dialog, und beim Drücken des Buttons in der 2. Form kommt die MessageBox im Hauptfenster.
Dies funktioniert mit
Form2.Show()
nicht!2. Wir wollen gleichzeitig 2 Mal den Dialog aufrufen.
Nichts leichter als das, mit dem
passiert nach Klick auf Button2 beim Klick auf Button3 dies:
Also schreiben wir analog zu oben folgenden Code:
VB.NET-Quellcode
- Private WithEvents frm3 As Form2
- Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
- If frm3 Is Nothing OrElse frm3.IsDisposed Then
- frm3 = New Form2
- End If
- If Not frm3.Visible Then
- frm3.Show(Me)
- End If
- If frm3.WindowState = FormWindowState.Minimized Then
- frm3.WindowState = FormWindowState.Normal
- End If
- End Sub
können wir also von einer Formklasse mehrere Instanzen erstellen und mit ihnen kommunizieren:
Ich hoffe, nun können wir unter .NET das Ende des Un-Aufrufs
Form2.Show()
einläuten. Die Begründung: Unter C# geht
Form2.Show();
nicht sollte uns ermahnen, es gleich anständig zu machen. 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!
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!
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ () aus folgendem Grund: Minimized ==> Normal