Ctrl+PageUp/Down做了一些奇怪的事情
本文关键字:Down Ctrl+PageUp | 更新日期: 2023-09-27 17:55:42
我正在Windows Forms中实现自己的控件。这是一个树视图,所以我必须实现导航键:箭头、向上/向下翻页以及它们与 shift 和控制的组合来处理多选。
最近我发现,Ctrl + PageUp/PageDown 的组合做了一些奇怪的事情。首先,它不会触发OnKeyDown(仅捕获ControlKey)。此外,在我用鼠标单击控件之前,不会捕获其他键(看起来它失去了焦点)我已经实现了 IsInputKey:
protected override bool IsInputKey(Keys keyData)
{
// Capture arrow keys
if ((keyData & (Keys.Up | Keys.Down | Keys.Left | Keys.Right |
Keys.PageDown | Keys.PageUp | Keys.ControlKey | Keys.Control)) != 0)
return true;
else
return base.IsInputKey(keyData);
}
在OnKeyDown处理程序中没有什么特别的。
这是怎么回事?
你的代码确实有效。 我正在接收 OnKeyDown 操作:
protected override void OnKeyDown(KeyEventArgs e) {
if (e.KeyData == (Keys.Control | Keys.PageDown)) {
// Control + Page Down
} else if (e.KeyData == Keys.PageDown) {
// Page Down
}
base.OnKeyDown(e);
}
下面是一个精简版本的代码:
public class VirtualTreeView : UserControl {
protected override void OnKeyDown(KeyEventArgs e) {
if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.PageUp || e.KeyCode == Keys.PageDown || e.KeyCode == Keys.Home || e.KeyCode == Keys.End) {
if (e.Control) {
MessageBox.Show("Ctrl - " + e.KeyCode.ToString());
}
} else
base.OnKeyDown(e);
}
protected override bool IsInputKey(Keys keyData) {
// Capture arrow keys
if ((keyData & (Keys.Up | Keys.Down | Keys.Left | Keys.Right | Keys.PageDown | Keys.PageUp | Keys.ControlKey | Keys.Control)) != 0)
return true;
else
return base.IsInputKey(keyData);
}
}
按 Control-PageUp 将显示一个消息框。