2010-03-29 216 views
2

我無法捕捉按Ctrl +上一頁按鍵在WinForms應用程序ListView控件。C#捕獲按Ctrl + PageUp鍵按鍵

我使用此代碼來捕獲鍵擊 -

private void ListViewEx_KeyDown(object sender, KeyEventArgs e) 
{ 
... 
if(e.Control){ 
if((e.KeyCode^Keys.Left) == 0) 
    MessageBox.Show("Left"); //shows messagebox 
else if((e.KeyCode^Keys.PageUp) == 0) 
    MessageBox.Show("PageUp"); //does not 
... 
} 

我需要潛入的WndProc來處理這個關鍵?謝謝。


編輯:我已經發現這個工作,問題是在ListControl到達他們之前封裝TabControl處理這些鍵。

+0

其實,在進一步的調查中,當我測試它時,你的代碼就會出現。 if代碼塊之前遺漏的代碼中是否發生了某些可能會干擾的代碼? – 2010-03-29 08:08:17

+0

不,它不工作 - 我有一個派生的ListView控件,除Ctrl + PageUp或Ctrl + PageDown外,每個組合鍵都可以工作。這兩個人一直在關注其他一些控制。 – Axarydax 2010-03-29 08:33:47

+0

好吧,我剛做了一個測試應用程序,這一切工作,當我租房進一步重現問題,並添加TabControl,我發現是TabControl誰eatin'我的鑰匙。 – Axarydax 2010-03-29 08:48:31

回答

4

無需檢查的WndProc:

if ((e.Modifiers & ModifierKeys) == Keys.Control && e.KeyCode == Keys.PageUp) 
{ 
    // ctrl + page up was pressed 
} 
2

Keys.Control | Keys.PageUp 
+1

這不起作用,因爲'KeyDown'事件包含有關觸發事件的鍵的信息,而不是當前按下的鍵。所以你會得到兩個獨立的'KeyDown'事件:一個用於Control鍵和一個用於PageUp鍵。 – 2010-03-29 07:21:11

+1

這將工作。 – 2010-03-29 08:01:16

+0

這取決於您何時運行此代碼;) – thelost 2010-03-29 08:03:32

4

的e.KeyData參數包括修改鍵。使它看起來像這樣:

if (e.KeyData == (Keys.Control | Keys.PageDown)) { 
    // Do your stuff 
    Console.WriteLine("Ctrl+PgDn"); 
    }