2014-06-20 79 views
0

我在處理表單上的CTRL-C,CTRL-V,CTRL-X時遇到問題。Control KeyDown事件陷阱CTRL-C等

Private Function HandleKeyDown(sender As Object, 
            e As KeyEventArgs, 
            ByVal vShow As String) As Boolean 
     HandleKeyDown = False 
     If e.KeyCode = Keys.F1 Then 
      Help.ShowPopup(Me, vShow, Cursor.Position) 
     End If 
     If e.KeyCode = Keys.C AndAlso e.Modifiers = Keys.Control Then 
      sender.Copy() 
     ElseIf e.KeyCode = Keys.V AndAlso e.Modifiers = Keys.Control Then 
      sender.Paste() 
     ElseIf e.KeyCode = Keys.X AndAlso e.Modifiers = Keys.Control Then 
      sender.Cut() 
     Else 
      Console.WriteLine(String.Format("Modifiers:{0} KeyCode:{1} KeyData:{2} KeyValue:{3} ", e.Modifiers.ToString, e.KeyCode.ToString, e.KeyData.ToString, e.KeyValue.ToString)) 
     End If 
     HandleKeyDown = True 
    End Function 

KeyDown事件從不拿起第二個鍵。 KeyCode的唯一值似乎是Keys.Control。這是什麼Console.WriteLine輸出CTRL-C

Modifiers:Control KeyCode:ControlKey KeyData:ControlKey, Control KeyValue:17 

我在哪裏出錯了?

回答

0

你是從實際的事件處理程序調用它嗎?我不得不添加「處理MyBase.KeyDown」並刪除你的額外參數。

Private Sub HandleKeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles MyBase.KeyDown 
    'HandleKeyDown = False 

    If e.KeyCode = Keys.C AndAlso e.Modifiers = Keys.Control Then 
     MessageBox.Show(String.Format("Modifiers:{0} --- KeyCode:{1} --- KeyData:{2} --- KeyValue:{3} ", 
             e.Modifiers.ToString, e.KeyCode.ToString, e.KeyData.ToString, e.KeyValue.ToString)) 
     'sender.Copy() 
    ElseIf e.KeyCode = Keys.V AndAlso e.Modifiers = Keys.Control Then 
     MessageBox.Show(String.Format("Modifiers:{0} --- KeyCode:{1} --- KeyData:{2} --- KeyValue:{3} ", 
             e.Modifiers.ToString, e.KeyCode.ToString, e.KeyData.ToString, e.KeyValue.ToString)) 
     'sender.Paste() 
    ElseIf e.KeyCode = Keys.X AndAlso e.Modifiers = Keys.Control Then 
     MessageBox.Show(String.Format("Modifiers:{0} --- KeyCode:{1} --- KeyData:{2} --- KeyValue:{3} ", 
             e.Modifiers.ToString, e.KeyCode.ToString, e.KeyData.ToString, e.KeyValue.ToString)) 
     'sender.Cut() 
    End If 

    'HandleKeyDown = True 
End Sub 

這對我有用。我分別得到88,67和86的值。

+0

該函數是直接從處理程序中調用的,但我直接將代碼放入事件處理程序中,但它仍然無效,所有值均爲Control。現在我會忘記它,我不知道它爲什麼不起作用。 – JA12

+0

我推薦的唯一兩件事就是嘗試使用我的代碼進行簡化測試,並從那裏重建或逐行調試,並查看您的布爾值是否阻止您的代碼繼續。這可能是這樣簡單的事情。除此之外,我發佈的代碼,工作,我只是沒有使用你的布爾值。 – Keith

+0

用你的事件處理函數更新你的問題。 – Keith