如何检查控制键是否已释放

时间:2012-12-11 01:27:43

标签: vb.net

我正在搜索如何检测是否释放了控制键,而没有释放其他键(在文本框中)。 这是我到目前为止所得到的:

Private Sub TextBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp
    If e.KeyCode = 17 Then
        GetTick = System.Environment.TickCount
    End If
End Sub

这项工作也会触发组合键,如Ctrl + c等...... 有什么可以替代17?

2 个答案:

答案 0 :(得分:0)

您是否尝试过e.Control,如下所示:

Private Sub TextBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp
     If e.Control Then
        GetTick = System.Environment.TickCount
     End If
End Sub

改编自: http://www.devcurry.com/2009/10/detecting-ctrl-and-shift-keys-on-form.html

答案 1 :(得分:0)

我有一段时间没有使用VB,但这里有一些可能对你有用的东西。 您可以尝试创建一个布尔变量(true false),称为ctrl或类似的东西。首次按下控制键时将其设为true,然后在按下键时将其设为false。然后你可以创建另一个变量来存储所有称为密钥代码的密钥代码。按下除控件以外的键时,键控代码为-1。以下是一些示例代码:

    Dim kys=-1
Dim ctrl=false
Private Sub TextBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp
    if e.KeyValue = Keys.Control then
        ctrl=false
    else
        kys=-1
    end if
End Sub
Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
    if e.KeyValue = Keys.Control then
        ctrl=true
    else
        kys=e.getKeyValue
    end if
    'Control c
    if ctrl=true & kys=Keys.c then
        MsgBox("It Worked!")
    end if
End Sub

顺便说一句,对于像这样的东西,e.KeyValue通常比e.keyCode更好,它更容易使用,因为你只需使用“Keys”而不是查找所有的密钥代码。