2016-06-09 83 views
1

Ich muss etwas tun, nachdem sich TextBox geändert hat.Gibt es ein VB.Net-Ereignis, das dasselbe von VBA "AfterUpdate" tut?

Wenn ich das TextChanged Ereignis verwende, wird der Code auf jedem eingefügten oder gelöschten Zeichen ausgeführt.

Googeln ich ein here mit einem String Variable vorschlagen gefunden speichern Wert von TextBox und mit Enter und Leave Veranstaltungen.

Ist es der einzige (oder der bessere) Weg, es zu tun?

Antwort

0

Ich glaube, Sie möchten etwas anderes aktualisieren, nachdem der Text geändert wurde fertig. aktualisieren etwas anderes auf jedem Tastendruck/Text geändert Event kann teuer sein.

dafür können Sie den Timer verwenden, um zu erkennen, ob der Benutzer mit Tastenanschlägen weitermacht oder pausiert hat.

Beispiel

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As  System.EventArgs) Handles TextBox1.TextChanged 
      TimerUserTypingDone.Stop() 
      TimerUserTypingDone.Interval = 400 ' duration to wait till concluding that typing by user is finished, and get results 
     TimerUserTypingDone.Start() 
End Sub 

Private Sub TimerUserTypingDone_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimerUserTypingDone.Tick 
     TimerUserTypingDone.Stop() 

    UpdateWhatsoEverRequired() 
End Sub 
+0

Danke, aber ich war auf der Suche nach etwas leichter. – genespos

+0

Können Sie genauer über Anforderungen sein. – pankaj

+0

Mit Enter und Leave ist ziemlich einfach. Ich fragte, ob es eine bessere Lösung gibt – genespos

0

Sie haben tatsächlich zwei Möglichkeiten:

1 Verwendung des Enter-Leave Muster.

Auf diese Weise speichern Sie den Textwert, wenn Sie in die TextBox eingeben und Sie den neuen Wert vergleichen, wenn Sie es verlassen.

Private _originalText As String 'To remember the text 

Private Sub MyTextBox_Enter(Sender As Object, e As EvventArgs) Handles MyTextBox.Enter 
    'When we enter the TextBox, we save the text value 
    _originalText = MyTextBox.Text 
End Sub 

Private Sub MyTextBox_Leave(Sender As Object, e As EventArgs) Handles MyTextBox.Leave 
    If MyTextBox.Text <> _originalText Then 
    'The text has changed 
    Else 
    'The text has not changed 
    End If 
End Sub 

2 Verwenden Sie einen Timer, der erkennt, wenn der Benutzer die Eingabe erfolgt.

Wie gesagt, here, ist die Idee, den Benutzer eine halbe Sekunde zwischen zwei Tasten zu geben. Wenn wir innerhalb dieses Timers sind, warten wir erneut, um zu signalisieren, dass sich der Text geändert hat.

+0

Ja, aber es ist die Lösung, die ich bereits gefunden habe – genespos

+0

Ja, ich habe es nur ein bisschen angepasst, so dass es einfacher aussieht ... –

+0

Die andere Lösung ist [dies] (http: // Stackoverflow .com/a/671735/5897829) und setzt fort, was @pankaj getan hat. –