Strg+V über Tastatur für Wert zweimal ein.

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Strg+V über Tastatur für Wert zweimal ein.

    Hallo zusammen,
    ich habe ein kleines Problem wo ich aktuell nicht weiterkomme und auch nichts zu gefunden habe. Ich habe in der Anwendung eine normale Textbox Control
    und zwei dazugehörige Events einmal KeyDown und KeyPress. Das kopieren und das ausschneiden funktioniert ohne Probleme. Beim Einfügen aus dem Clipboard
    gibt es allerdings noch ein Problem.

    Wenn ich in dieser mehrzeiligen Textbox mit der rechten Maustaste klicke und im Kontextmenü auf "Einfügen" klicke, ich alles in Ordnung. Es wird nichts doppelt eingefügt.

    Klick ich aber in die leere Textbox und drücke Strg+V, wird egal welcher Text das ist, dieser doppelt eingefügt. So als würde das Event zweimal abgefeuert. Ich habe
    das Debuggt es wird so weit ich das sehen kann nicht zwei mal abgefeuert.

    Ich habe nun etliche Konstallationen durch, bis jetzt hat nichts geholfen.
    Ich bin mir aber sicher, dass es irgendwie mit dem Event zu tun hat.

    Hier einmal der Code

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' Textfeld Mail_Password_Settings_Mailbody, kopieren, einfügen, ausschneiden
    3. ''' </summary>
    4. ''' <param name="sender"></param>
    5. ''' <param name="e"></param>
    6. Private Sub txt_Mail_Password_Settings_Mailbody_KeyDown(sender As Object, e As KeyEventArgs) Handles txt_Mail_Password_Settings_Mailbody.KeyDown
    7. Dim sTmpString As String = ""
    8. If Clipboard.ContainsText Then 'nur Texte einfügen
    9. If (e.KeyCode = Keys.V) AndAlso (e.Modifiers = Keys.Control) Then
    10. If txt_Mail_Password_Settings_Mailbody.SelectedText = Nothing Then
    11. sTmpString = Clipboard.GetText()
    12. sTmpString = sTmpString.Replace("'", "") 'entferne >> '
    13. txt_Mail_Password_Settings_Mailbody.Text = sTmpString
    14. Else
    15. sTmpString = txt_Mail_Password_Settings_Mailbody.Text & Clipboard.GetText()
    16. sTmpString = sTmpString.Replace("'", "") 'entferne >> '
    17. txt_Mail_Password_Settings_Mailbody.Text = sTmpString
    18. End If
    19. End If
    20. End If
    21. 'kopieren
    22. If e.Control And e.KeyCode = Keys.C Then
    23. If txt_Mail_Password_Settings_Mailbody.SelectionLength > 0 Then
    24. txt_Mail_Password_Settings_Mailbody.Copy()
    25. End If
    26. End If
    27. 'ausschneiden
    28. If e.Control And e.KeyCode = Keys.X Then
    29. If txt_Mail_Password_Settings_Mailbody.SelectionLength > 0 Then
    30. txt_Mail_Password_Settings_Mailbody.Cut()
    31. End If
    32. End If
    33. End Sub
    34. ''' <summary>
    35. ''' Zeichensatz beschränken kein ' Zeichen
    36. ''' </summary>
    37. ''' <param name="sender"></param>
    38. ''' <param name="e"></param>
    39. Private Sub txt_Mail_Password_Settings_Mailbody_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txt_Mail_Password_Settings_Mailbody.KeyPress
    40. Select Case Asc(e.KeyChar)
    41. Case 39
    42. e.Handled = True
    43. Case Else
    44. e.Handled = False
    45. End Select
    46. End Sub


    Hat einer von euch das auch schon mal gehabt?
    Wie kann man das dauerhaft lösen, dass es nicht zum doppelten Einfügen kommen kann?

    Dank euch schon mal
    VG steel
    Hallo steel75,

    erstmal gebe ich DTF recht, wenn möglich das kopiern, auschneiden etc. vom System erledigen lassen.

    Wenn du natürlich den Text den du einfügst noch vorher bearbeitest, dann mußt du die Taste "abfangen".

    Ich würde also beim KeyDown, in der IF-Abfrage wo du per Code den Text bearbeitest und einfügst, folgendes einfügen.

    VB.NET-Quellcode

    1. e.SuppressKeyPress = True