Modalen Dialog automatisch schliessen

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Morlock.

    Modalen Dialog automatisch schliessen

    Hallo Community,
    habe seit langem mal wieder ein Problem, welches ich nicht lösen kann, daher bitte ich Euch um Unterstützung.
    Ich möchte nach Eingabe im Textfeld der Form2 diese nach 10 Zeichen automatisch schließen
    und den Text in Form1 anzeigen
    Form1:

    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. Dim f2 As New Form2
    7. If f2.ShowDialog() = Windows.Forms.DialogResult.OK Then Label1.Text = f2.TextBoxEingabe.Text
    8. End Sub
    9. End Class

    Form2:
    Wenn ich es mit einem Button auf Form2 mache habe ich das gewünschte Ergebnis
    Ich möchte aber nach Eingabe von 10 Zeichen den Dialog schließen

    Quellcode

    1. Public Class Form2
    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. Button1.DialogResult = DialogResult.OK
    7. 'Me.DialogResult = DialogResult.OK
    8. End Sub
    9. 'Private Sub TextBoxEingabe_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBoxEingabe.KeyPress
    10. ' If TextBoxEingabe.TextLength = 10 Then
    11. ' Me.Close()
    12. ' End If
    13. 'End Sub
    14. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    15. Me.Hide()
    16. Me.Close()
    17. End Sub
    18. End Class

    Wie kann ich dies lösen, für Eure Unterstützung danke ich im Voraus Gruß Morlock
    Form mit einer Textbox

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    3. If Me.TextBox1.TextLength >= 4 Then
    4. Me.Close()
    5. End If
    6. End Sub
    7. End Class
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
    Hallo Akanel,
    danke für die Antwort, doch dies war nicht die Problemstellung.
    Hast Du meinen Code nicht gesehen.
    Form1 wird geladen, Form2 ist Modal (ShowDialog) und nach Eingabe in TextBox soll sich die Form2 schließen.

    In Deinem Beispiel gibt es keinen DialogResult, welcher den Dialog beendet und die Textbox an Form1 weitergibt.

    Teste mal meinen Code von oben und verwende den Button, dann verstehst Du was ich meine
    und dass soll nun funktionieren ohne Button_Click also nach Eingabe von einer Anzahl bestimmter Zeichen.

    Gruß Morlock
    @Akanel hat sehr wohl die Problemstellung verstanden, und dir gezeigt mit welchem Event du dein vorhaben am besten lösen kannst.
    Anstatt Me.Close kannst du natürlich auch direkt den DialogResult der Form setzen, wodurch sich die Form ebenfalls schließt, sofern dir der DialogResult wichtig ist.

    Um den eingegebenen Text zu bekommen, kannst du der Form2 eine String-Property verpassen, die du dann von Form1 aus abfragst, nachdem Form2 geschlossen wurde.
    @Morlock Mit dem Code von @Akanel , den Ausführungen von @EaranMaleasi und diesem eher unbekannten Thread Dialoge: Instanziierung von Forms und Aufruf von Dialogen
    geht das ganz einfach:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    3. If Me.TextBox1.TextLength >= 42 Then
    4. My.TEXT_PROPERTY = "WhatEver" ' dies hier
    5. Me.DialogResult = DialogResult.Ignore ' und dies hier
    6. End If
    7. End Sub
    8. End Class
    Du musst Dir n ur noch ein entsprechendes DialogResult aussuchen.
    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!
    Herzlichen Dank Euch,
    doch ich habe Eure Denkweise trotzdem nicht verstanden. Daher funktioniert es auch nicht so wie ich mir es vorstelle.

    Wie Ihr im Code oben in der Form1 sehen könnt, habe ich dort nur ein Label1. Die Form1 ist im Hintergrund, Form2 wird als Dialog modal im Vordergrund angezeigt mit Textfeld1 und Button1
    (doch genau den Button will ich nicht haben
    ) sondern nach Eingabe im Textfeld der Form 2 soll diese nach einer bestimmten Anzahl von Zeichen das gleiche tun als, wenn ich auf den
    Butten klicken würde.
    Hier nochmals mein Code der Form1 und 2

    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. Me.Show()
    7. Dim f2 As New Form2
    8. If f2.ShowDialog() = Windows.Forms.DialogResult.OK Then Label1.Text = f2.TextBoxEingabe.Text
    9. End Sub
    10. End Class​

    Quellcode

    1. Public Class Form2
    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. Button1.DialogResult = DialogResult.OK
    7. End Sub
    8. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    9. Me.Hide()
    10. Me.Close()
    11. End Sub
    12. End Class​


    Ich danke für Eure Erklärungen Gruß Morlock
    Ersetz doch einfach entsprechend Post#5 in Codeblock#2 die Zeilen#8-#11 (bei der Z#9 m.E. sinnlos ist, wenn in der nächsten Zeile das Form geschlossen wird; außerdem verwendest Du selber kein DialogResult, obwohl Du es wolltest), durch den richtigen Code. Also: Statt

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Me.Hide()
    3. Me.Close()
    4. End Sub

    schreibst Du

    VB.NET-Quellcode

    1. Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    2. If TextBox1.TextLength < 10 Then Return
    3. Me.DialogResult = DialogResult.OK
    4. End Sub


    Und bitte die korrekten CodeTags verwenden.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @Morlock Dieser Code ist ausprobiert:
    Form1

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. Using dlg = New Form2
    4. If dlg.ShowDialog() = Windows.Forms.DialogResult.OK Then
    5. Label1.Text = dlg.TextBox1.Text
    6. End If
    7. End Using
    8. End Sub
    9. End Class
    Form2

    VB.NET-Quellcode

    1. Public Class Form2
    2. Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    3. If TextBox1.TextLength >= 10 Then
    4. DialogResult = Windows.Forms.DialogResult.OK
    5. End If
    6. End Sub
    7. End Class
    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!