Vb.net 粘贴拦截事件失败

Vb.net 粘贴拦截事件失败,vb.net,visual-studio-2015,paste,Vb.net,Visual Studio 2015,Paste,我想截获一个名文本框的粘贴事件,这样如果用户粘贴“Joe Smith,PhD”,他们将在名文本框中得到“Joe”,并在姓文本框中看到“Smith,PhD”。相反,我得到的是名字文本框中的“Joe Smith,PhDJoe”和姓氏文本框中的“Smith,PhD”。我添加了一个messagebox作为断点,如果我取消对该行的注释,msgbox将显示,然后子项将完美工作。那么,这是否是一个时间问题(Windows 10/VS2015,如果这很重要的话) 关于如何截获粘贴事件,有很多帖子,下面我的代码就

我想截获一个名文本框的粘贴事件,这样如果用户粘贴“Joe Smith,PhD”,他们将在名文本框中得到“Joe”,并在姓文本框中看到“Smith,PhD”。相反,我得到的是名字文本框中的“Joe Smith,PhDJoe”和姓氏文本框中的“Smith,PhD”。我添加了一个messagebox作为断点,如果我取消对该行的注释,msgbox将显示,然后子项将完美工作。那么,这是否是一个时间问题(Windows 10/VS2015,如果这很重要的话)

关于如何截获粘贴事件,有很多帖子,下面我的代码就是基于此编写的。我做错了什么

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 

您可以将
firstword
声明为
表单
级别变量

Private firstWord As String
然后在
TBfname\u KeyDown

firstWord = words(0)
然后在
KeyUp
事件中重新分配
TBfname.Text

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

您可以将
firstword
声明为
表单
级别变量

Private firstWord As String
然后在
TBfname\u KeyDown

firstWord = words(0)
然后在
KeyUp
事件中重新分配
TBfname.Text

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

这是可行的,所以我已经准备好了,但是我不明白为什么我的代码会追加而不是替换文本。@Matt-不确定为什么数据会追加。由于某种原因,
TextChanged
事件似乎正在执行此操作。如果在原始版本中将
Application.DoEvents()
放在
TBfname.Text=firstWord
之前,它可以工作。这可以工作,所以我已经准备好了,但我不明白为什么我的代码会追加而不是替换文本。@Matt-不确定为什么要追加数据。由于某种原因,
TextChanged
事件似乎正在执行此操作。在原始版本中,如果将
Application.DoEvents()
放在
TBfname.Text=firstWord
之前,则可以正常工作。