Benutzer mit den meisten Antworten
Filtering Textbox Copy & Paste

Frage
-
Hi,
Ich habe eine für eine Textbox einen Inputfilter implementiert, indem ich mich an den KeyDown Event anhänge. Das funktioniert auch soweit sehr gut. Das einziges Problem ist, dass wenn ich Text aus einer anderen Textbox kopiere mit STRG + C und dann in die gefilterte Textbox mit STRG + V einfüge, dann der komplette Text mit den eigentlich "verbotenen" Zeichen in der Textbox erscheint, was leider für unsere Anwendung nicht akzeptabel ist. Ich möchte auch nicht auf Copy & Paste verzichten.
Hat jemand vielleicht schon Erfahrungen damit oder eine Idee, wie man es lösen könnte?
Mit freundlichen Grüßen
Nikolai Hellwig
CHW Software GmbH
Mittwoch, 10. November 2010 12:33
Antworten
-
... habe den Code noch etas modifiziert:
Private tmpCPT As String Private Sub tbTest_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Input.KeyEventArgs) Handles tbTest.KeyDown If ((Keyboard.Modifiers And ModifierKeys.Control) = ModifierKeys.Control) Or (e.Key = Key.V) Then tmpCPT = Clipboard.GetText If tmpCPT <> String.Empty Then ' Hier den abgefangenen Text modifizieren, z.B.: tmpCPT = tmpCPT.Substring(0, 5) ' ... und modifizierten Text in Zwischenablage geben: Clipboard.SetText(tmpCPT) End If End If End Sub Private Sub tbTest_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Input.KeyEventArgs) Handles tbTest.KeyUp If (e.Key = Key.V) Then If ((Keyboard.Modifiers And ModifierKeys.Control) = ModifierKeys.Control) Then ' Clipboard leeren: Clipboard.SetText(String.Empty) End If End If End Sub
- Als Antwort markiert nhellwig Montag, 15. November 2010 08:40
Mittwoch, 10. November 2010 14:52
Alle Antworten
-
Hallo Nikolai,
fang Strg+V ab, zieh den Inhalt der Zwischenablage mit GetText(), Filter die unzulässigen Zeichen aus dem Rückgabewert von GetText(), füg den modifizierten Text wieder in die Zwischenablage.
Z.B. so:
Private tmpCPT As String Private Sub txTest_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Input.KeyEventArgs) Handles txTest.KeyDown If ((Keyboard.Modifiers And ModifierKeys.Control) = ModifierKeys.Control) Or (e.Key = Key.V) Then tmpCPT = Clipboard.GetText ' Hier den abgefangenen Text modifizieren, z.B.: tmpCPT = tmpCPT.Substring(0, 5) ' ... und modifizierten Text in Zwischenablage geben: Clipboard.SetText(tmpCPT) End If End Sub
Martin
Mittwoch, 10. November 2010 14:26 -
... habe den Code noch etas modifiziert:
Private tmpCPT As String Private Sub tbTest_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Input.KeyEventArgs) Handles tbTest.KeyDown If ((Keyboard.Modifiers And ModifierKeys.Control) = ModifierKeys.Control) Or (e.Key = Key.V) Then tmpCPT = Clipboard.GetText If tmpCPT <> String.Empty Then ' Hier den abgefangenen Text modifizieren, z.B.: tmpCPT = tmpCPT.Substring(0, 5) ' ... und modifizierten Text in Zwischenablage geben: Clipboard.SetText(tmpCPT) End If End If End Sub Private Sub tbTest_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Input.KeyEventArgs) Handles tbTest.KeyUp If (e.Key = Key.V) Then If ((Keyboard.Modifiers And ModifierKeys.Control) = ModifierKeys.Control) Then ' Clipboard leeren: Clipboard.SetText(String.Empty) End If End If End Sub
- Als Antwort markiert nhellwig Montag, 15. November 2010 08:40
Mittwoch, 10. November 2010 14:52 -
Hallo Nikolai,
ich würde auf TextChanged reagieren und eine Validierung vor dem Verarbeiten/Speichern/etc. einfügen. Quasi wenn man auf den Button klickt werden alle Inhalte noch mal geprüft.
Ansonsten wirst du das nächste mal feststellen das ein User noch andere Wege gefunden hat den unerlaubten Text dort einzufügen. Ich denke da zum Beispiel an DragAndDrop wie im Visual Studio. Geht zwar im Moment noch nicht, aber wer sagt das das nicht im nächsten Update enthalten ist...
Daniel
silverlight-community.de - deutsche Community mit Tutorials, Blogs und UsergroupsFreitag, 12. November 2010 14:01