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处理这些键。
无需检查的WndProc:
if ((e.Modifiers & ModifierKeys) == Keys.Control && e.KeyCode == Keys.PageUp)
{
// ctrl + page up was pressed
}
为
Keys.Control | Keys.PageUp
这不起作用,因为'KeyDown'事件包含有关触发事件的键的信息,而不是当前按下的键。所以你会得到两个独立的'KeyDown'事件:一个用于Control键和一个用于PageUp键。 – 2010-03-29 07:21:11
这将工作。 – 2010-03-29 08:01:16
这取决于您何时运行此代码;) – thelost 2010-03-29 08:03:32
的e.KeyData参数包括修改键。使它看起来像这样:
if (e.KeyData == (Keys.Control | Keys.PageDown)) {
// Do your stuff
Console.WriteLine("Ctrl+PgDn");
}
其实,在进一步的调查中,当我测试它时,你的代码就会出现。 if代码块之前遗漏的代码中是否发生了某些可能会干扰的代码? – 2010-03-29 08:08:17
不,它不工作 - 我有一个派生的ListView控件,除Ctrl + PageUp或Ctrl + PageDown外,每个组合键都可以工作。这两个人一直在关注其他一些控制。 – Axarydax 2010-03-29 08:33:47
好吧,我刚做了一个测试应用程序,这一切工作,当我租房进一步重现问题,并添加TabControl,我发现是TabControl谁eatin'我的钥匙。 – Axarydax 2010-03-29 08:48:31