如何捕获文本框的Ctrl-V键事件

g5t*_*mas 0 vb.net winforms

我有一个仅接受货币金额的文本框(例如123.40),并且编写了以下例程以仅允许数字,小数点和退格键。问题是它不允许用户将值(例如Ctrl-V)复制和粘贴到文本框中。

 Private Sub unitPriceTxtBox_keypress(ByVal sender As System.Object, ByVal e As KeyPressEventArgs) Handles unitPriceTxtBox.KeyPress
        If (Not e.KeyChar = ChrW(Keys.Back) And ("0123456789.-").IndexOf(e.KeyChar) = -1) Or (e.KeyChar = "." And unitPriceTxtBox.Text.ToCharArray().Count(Function(c) c = ".") > 0) Then

            e.Handled = True
        End If
    End Sub
Run Code Online (Sandbox Code Playgroud)

我正在做一些在线研究,而ctrl v键使用的是代码22。请参阅https://social.msdn.microsoft.com/Forums/en-US/5824457e-9112-43ef-83df-7037a36dd365/what-is-the -keychar-for-ctrlc-and-ctrlv-in-c?forum = winforms,但似乎不起作用。

密钥代码的另一个参考在这里。 https://msdn.microsoft.com/zh-CN/library/system.windows.forms.keys(v=vs.110).aspx

有人有见识吗?

谢谢。

Jim*_*itt 5

您可以使用该KeyDown事件。您需要验证剪贴板中的文本。

Private Sub unitPriceTxtBox_KeyDown(sender As Object, e As KeyEventArgs) Handles unitPriceTxtBox.KeyDown

    If e.Modifiers = Keys.Control AndAlso e.KeyCode = Keys.V Then
        unitPriceTxtBox.Text = Clipboard.GetText()
    End If

End Sub
Run Code Online (Sandbox Code Playgroud)