2016-08-04 35 views
1

Ich möchte ein Einfügen-Ereignis für ein FIRST NAME-Textfeld abfangen, so dass, wenn der Benutzer "Joe Smith, PhD" einfügen, sie "Joe" in der FIRST NAME-Textfeld erhalten, und sie sehen "Smith , PhD "in der Textbox LETZTER NAME. Stattdessen bekomme ich "Joe Smith, PhDJoe" in der Textbox FIRST NAME und "Smith, PhD" in der Textbox LAST NAME. Ich habe eine Nachrichtenbox als Haltepunkt für mich hinzugefügt und wenn ich diese Zeile auskommentiere, wird die msgbox angezeigt und dann funktioniert das Unterprogramm perfekt. Also, ist das ein Timing-Problem (Windows 10/VS2015, wenn das wichtig ist)?Paste Intercept event failure

Es gibt viele Beiträge zum Abfangen von Paste-Events, und mein Code unten basiert darauf. Was mache ich falsch?

Public Class test 

Private Sub TBfname_PASTE(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TBFname.KeyDown 

    Dim Pasting As String = Clipboard.GetText() 

    If e.Modifiers = Keys.Control AndAlso e.KeyCode = Keys.V Then 

     Dim SplitWhere As Int64 = 0 
     Dim words = Pasting.Split(" "c) 
     Dim firstWord = words(0) 

     If Pasting.Contains(" ") Then 

      SplitWhere = Pasting.IndexOf(" ") 
      Dim LN As String = "" 

      Dim long2 As Int64 = Pasting.Length - SplitWhere - 1 
      If long2 > 0 Then 
       LN = Pasting.Substring(SplitWhere + 1, long2) 
       TBLname.Text = LN 
      End If 

      '    MsgBox(Pasting & " vs " & TBFname.Text) 

      TBFname.Text = firstWord 

     End If 
     e.Handled = True 

    End If 

End Sub 
End Class 

Antwort

0

Eine Sache, man konnte, ist firstword als Form Ebene zu erklären Variable

Private firstWord As String 

und weisen Sie dann in TBfname_KeyDown

firstWord = words(0) 

Dann im KeyUp Ereignis erneut zuweisen TBfname.Text

Private Sub TBfname_KeyUp(sender As Object, e As KeyEventArgs) Handles TBfname.KeyUp 
    TBfname.Text = firstWord 
End Sub 
+0

Das funktioniert, also bin ich fertig, aber ich bin verwirrt, warum mein Code angehängt, anstatt Text zu ersetzen. –

+1

@Matt - Nicht sicher, warum die Daten anhängen. Aus irgendeinem Grund scheint das 'TextChanged'-Ereignis dies zu tun. Wenn Sie 'Application.DoEvents()' vor 'TBfname.Text = firstWord' in Ihrer ursprünglichen Version platzieren, funktioniert es. –