2012-12-11 85 views
0

我正在尋找如何檢測控制鍵和其他鍵是否被釋放(在文本框中)。 這是我想出了迄今:如何檢查控制鍵是否被釋放

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?

+0

您需要考慮這一點,您的用戶無法在*確切*同時釋放密鑰。按Ctrl + C的正常方法是Ctrl,然後是C,然後釋放C,然後釋放Ctrl。所以除非你保留歷史記錄,否則沒有一種很好的方法可以說明只有Ctrl鍵被按下。 –

+0

嗨漢斯,問題很清楚。檢測何時(且僅當)ctrl鍵被單獨按下(實際釋放)。如果後來有人不小心按下(說)C鍵,那麼第一個條件變爲False。 –

回答

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

+0

嗨,我嘗試。這工作(作爲布爾)在keyDown但不是在keyUp處理程序。 –

+0

你有沒有嘗試過在KeyUp中放置一個MsgBox,以確保它在按Ctrl時被觸發?如果是這樣,您可以顯示e的字段以查看需要檢查的內容。 – RonaldBarzell

+0

是的,keyUp事件按預期發射。這就是我來到'17':) –

0

我沒有在使用了一段VB,但這裏的一些東西,可以幫助你。 你可以嘗試創建一個布爾變量(true false),稱爲ctrl或類似的東西。當第一次按下控制鍵時使其成爲真,然後當它們放開時使它成爲假。然後你可以創建另一個變量來存儲所有被稱爲鍵碼的鍵碼或其他東西。當按下除控件以外的其他鍵時,使鍵碼爲-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像這樣的東西更好,更容易的查找使用,因爲你可以用「鑰匙」,而不是所有的鍵碼。

+0

條件「如果e.KeyValue = Keys.Control然後」永遠不會滿足我的keyUp事件... –

+1

應該是'Keys.ControlKey' – SSS

+0

SSS,是的!我可以使用一個常量Keys.ControlKey而不是17.謝謝。 –

相關問題