locked
Filtering Textbox Copy & Paste RRS feed

  • 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 Usergroups
    Freitag, 12. November 2010 14:01
  • Danke, hat funktioniert!
    Montag, 15. November 2010 08:41