C#捕获按Ctrl + PageUp键按键

问题描述:

我无法捕捉按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

无需检查的WndProc:

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

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

的e.KeyData参数包括修改键。使它看起来像这样:

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