Button - Aktion nur nach zweimaligem Drücken durch Textbox-Validierung

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von sronny.

    Button - Aktion nur nach zweimaligem Drücken durch Textbox-Validierung

    Guten Morgen,

    ich muss da mal eine Frage fragen:

    Und zwar habe ich ein Form, in welchem mehrere Textboxen sind. Nach Eingabe in einer Textbox überprüfe ich im .Validating-Event
    die Eingabe und passe die in der Form dahinterliegenden Daten an und will diese dann mittels Button Speichern (btSpeichern) oder eben nicht speichern lassen(btAbbruch).

    Das Validieren funktioniert auch solang, wie ich innerhalb der Textboxen hin- und herhüpfe. Ändere ich nur in einer Textbox etwas und klicke dann Speichern wird zwar Textbox.Validating ausgeführt, aber nicht die Aktion hinter dem Speicherbutton, sondern erst nach zweimaligen Drücken desselben - nämlich die geänderten Daten entsprechend zu speichern und die Form zu schließen. Daher nun meine Frage, wie erreiche ich es, das eben die Textboxdaten validiert werden und anschließend im Erfolgsfalle gespeichert und geschlossen wird?
    Hi,

    wenn du Fragen beantwortet haben möchtest solltest du deinen Code posten oder zumindest den wichtigen Teil.

    Grundsätzlich kann ich dein Problem nicht nachvollziehen.
    Im Validating Event kannst du e.Cancel auf true oder false setzen. Setzt du es auf True wird das Button Event nicht mehr ausgeführt. Default ist es False und dann sollte das Event ausgeführt werden.
    Das ist meine Signatur und sie wird wunderbar sein!
    Im Validating Event kannst du e.Cancel auf true oder false setzen. Setzt du es auf True wird das Button Event nicht mehr ausgeführt. Default ist es False und dann sollte das Event ausgeführt werden.


    Jep, das ist mir soweit schon klar und bewusst. Hab ich auch schon damit herumexperimentiert.

    Das ist mein Validate-Event:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub txtStrasse_Validating(sender As Object, e As CancelEventArgs) Handles txtStrasse.Validating
    2. If String.IsNullOrEmpty(txtStrasse.Text) Then Return
    3. If Not lstStrassen.Contains(txtStrasse.Text) Then
    4. Adresse.Strasse = txtStrasse.Text
    5. Adresse.IDAdresse = 0
    6. Adresse.Geändert = True
    7. Else
    8. If Not String.IsNullOrEmpty(mtxtPLZ.Text) Then
    9. bsAdresseSuche.FilterX("[Strasse] = ? And [PLZ] = ?", txtStrasse.Text, mtxtPLZ.Text)
    10. If bsAdresseSuche.Count = 1 Then
    11. Dim rw = DirectCast(DirectCast(bsAdresseSuche.Current, DataRowView).Row, Kontakte.AdresseRow)
    12. Adresse.Strasse = rw.Strasse
    13. Adresse.PLZ = rw.PLZ
    14. Adresse.Ort = rw.Ort
    15. Adresse.IDAdresse = rw.ID
    16. Adresse.Geändert = False
    17. txtOrt.Text = rw.Ort
    18. mtxtPLZ.Text = rw.PLZ
    19. ElseIf bsAdresseSuche.Count > 1 Then
    20. Using frm1 = New frmAdressAuswahl(bsAdresseSuche)
    21. frm1.lblHinweis.Text = "Zu Ihrer Eingabe wurden mehrere Adressen gefunden." &
    22. System.Environment.NewLine &
    23. "Wählen Sie eine Adresse oder legen Sie eine neue Adresse an:"
    24. If frm1.ShowDialog(Me) = DialogResult.Cancel Then
    25. Dim rw = DirectCast(DirectCast(bsAdresseSuche.Current, DataRowView).Row, Kontakte.AdresseRow)
    26. Adresse.Strasse = rw.Strasse
    27. Adresse.PLZ = rw.PLZ
    28. Adresse.Ort = rw.Ort
    29. Adresse.IDAdresse = rw.ID
    30. Adresse.Geändert = False
    31. txtOrt.Text = rw.Ort
    32. mtxtPLZ.Text = rw.PLZ
    33. Else
    34. Adresse.Strasse = txtStrasse.Text
    35. Adresse.IDAdresse = 0
    36. Adresse.Geändert = True
    37. End If
    38. End Using
    39. Else
    40. Adresse.Strasse = txtStrasse.Text
    41. Adresse.IDAdresse = 0
    42. Adresse.Geändert = True
    43. End If
    44. Else
    45. bsAdresseSuche.FilterX("[Strasse] = ?", txtStrasse.Text)
    46. If bsAdresseSuche.Count = 1 Then
    47. Dim rw = DirectCast(DirectCast(bsAdresseSuche.Current, DataRowView).Row, Kontakte.AdresseRow)
    48. Adresse.Strasse = rw.Strasse
    49. Adresse.PLZ = rw.PLZ
    50. Adresse.Ort = rw.Ort
    51. Adresse.IDAdresse = rw.ID
    52. Adresse.Geändert = False
    53. txtOrt.Text = rw.Ort
    54. mtxtPLZ.Text = rw.PLZ
    55. ElseIf bsAdresseSuche.Count > 1 Then
    56. Using frm1 = New frmAdressAuswahl(bsAdresseSuche)
    57. frm1.lblHinweis.Text = "Zu Ihrer Eingabe wurden mehrere Adressen gefunden." &
    58. System.Environment.NewLine &
    59. "Wählen Sie eine Adresse oder legen Sie eine neue Adresse an:"
    60. If frm1.ShowDialog(Me) = DialogResult.Cancel Then
    61. Dim rw = DirectCast(DirectCast(bsAdresseSuche.Current, DataRowView).Row, Kontakte.AdresseRow)
    62. Adresse.Strasse = rw.Strasse
    63. Adresse.PLZ = rw.PLZ
    64. Adresse.Ort = rw.Ort
    65. Adresse.IDAdresse = rw.ID
    66. Adresse.Geändert = False
    67. txtOrt.Text = rw.Ort
    68. mtxtPLZ.Text = rw.PLZ
    69. Else
    70. Adresse.Strasse = txtStrasse.Text
    71. Adresse.IDAdresse = 0
    72. Adresse.Geändert = True
    73. End If
    74. End Using
    75. Else
    76. Adresse.Strasse = txtStrasse.Text
    77. Adresse.IDAdresse = 0
    78. Adresse.Geändert = True
    79. End If
    80. End If
    81. End If
    82. If Not Adresse.Strasse.Equals(OriginalAdresse.Strasse) Then Gespeichert = False
    83. bsAdresseSuche.Filter = ""
    84. End Sub



    Und dieses mein Button-Click-Event:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub btSpeichern_Click(sender As Object, e As EventArgs) Handles btSpeichern.Click
    2. Speichern()
    3. End Sub




    Normal sollte er ja erst das V-Event ausführen und im Anschluss dann die Sachen die im Button-Click-Event drinstehen.
    Er führt aber nur das V-Event aus und dann herrscht Ruhe. Erst beim zweiten Klick auf den Button führt er Speichern aus.
    Habe das ganze auch in das Textbox-Leave-Event gepackt - mit dem selben Resultat. Der Button hat den Dialog-Result OK und beendet danach die Form.