Gibt es eine Möglichkeit herauszufinden, ob das "TextChanged" -Ereignis ausgelöst wird, weil
- Der Benutzer tippt in ein Textfeld oder
- der Programmierer namens myTextBox.Text="etwas"?
Nur um Ihnen etwas Farbe zu geben, möchte ich nicht reagieren, wenn der Benutzer jeden Buchstaben in das Textfeld schreibt, so dass ich das Ereignis "Validated" verwende, um zu erkennen, wann der Benutzer fertig ist, damit ich reagieren kann. Das Problem ist, ich habe keine Möglichkeit zu fangen, wenn der Programmierer "myTextbox.Text=" etwas "tut. Die einzige Weise, die ich kenne, um Änderungen zu erfassen, ist, TextChanged zu verwenden, aber dann möchte ich nicht reagieren, wenn der Der Benutzer tippt jeden Buchstaben in das Textfeld ein. Irgendwelche Vorschläge?
Ich rate, dass Sie ein UserControl erstellen, das andere Entwickler verwenden werden. Daher können "Endbenutzer" -Programmierer den Text programmgesteuert festlegen. Ich denke, die einfachste Sache wäre, @ jzworkmans Vorschlag zu folgen und eine Klasse zu erstellen, die den Texteigenschaften-Setzer außer Kraft setzt. Wie @vulkanino feststellt, sollten Sie das Ereignis Validieren wahrscheinlich erhöhen und abfangen.
%Vor%Fügen Sie Ihrer Quelle den gleichen Handler zu den Validating- und ProgrammerChangedText-Ereignissen hinzu:
%Vor% Wenn Sie eine Validierung durchführen möchten, verwenden Sie das Validating
-Ereignis, nicht das Validated
(das kommt, wenn es zu spät ist, um zu handeln).
Wie gesagt, was ist das real hier?
Dem Validating-Ereignis wird ein Objekt vom Typ CancelEventArgs übergeben. Ob Wenn Sie feststellen, dass die Daten des Steuerelements nicht gültig sind, können Sie die Daten löschen Überprüfen des Ereignisses, indem Sie die Cancel-Eigenschaft dieses Objekts auf true festlegen. Ob Wenn Sie die Cancel-Eigenschaft nicht festlegen, wird Windows Forms davon ausgehen Validierung für dieses Steuerelement erfolgreich und das Validated-Ereignis auslösen.
(http://msdn.microsoft.com/en-us/library/ms229603.aspx)