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

时间:2016-11-03 15:51:39

标签: 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

我正在网上做一些研究,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/en-us/library/system.windows.forms.keys(v=vs.110).aspx

任何人都有见解?

感谢。

2 个答案:

答案 0 :(得分:4)

您可以使用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

答案 1 :(得分:0)

我设置了一个KeyPress事件,并在断点处捕获了Ctrl + C/V的值。将此值复制到代码文件中最终为""c""c,它们看起来是空的,但实际上有一个奇怪的小字符,其中对应于所需的值

If e.KeyChar = ""c Then ' C
    Clipboard.SetText(vlantxt.Text)
ElseIf e.KeyChar = ""c Then 'V
    Dim copiedText = Clipboard.GetText
    ' Validate attempted paste
End If

enter image description here

这不太理想,但它确实有效。