我想为表单上所有可用的控件运行一个通用的 KeyDown 偶数处理程序。我有什么办法可以做到这一点?
更清楚地说,我的意图是在按下 Enter 键时检测它,并将焦点从当前控件移动到具有下一个 TabIndex 的控件。
我怎样才能做到这一点?
您必须避免妨碍正常使用 Enter 键。这应该很接近:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
if (keyData == Keys.Enter && this.AcceptButton == null && this.ActiveControl != null) {
TextBoxBase box = this.ActiveControl as TextBoxBase;
if (box == null || !box.Multiline) {
// Not a dialog, not a multi-line textbox; we can use Enter for tabbing
this.SelectNextControl(this.ActiveControl, true, true, true, true);
return true;
}
}
return base.ProcessCmdKey(ref msg, keyData);
}
覆盖表单的ProcessCmdKey
方法。
实际上 ProcessCmdKey 不会出现在表单事件列表下,所以不能更早地使用它。^_^
我进行了一些编辑并对其进行了修改以检测是否有任何按钮可用,如果有,它不会移动焦点,而是按下按钮..
Button b = this.ActiveControl as Button;
if (keyData == Keys.Enter && this.AcceptButton == null && this.ActiveControl != null && !this.ActiveControl.Equals(b))
{
TextBoxBase box = this.ActiveControl as TextBoxBase;
if (box == null || !box.Multiline)
{
// Not a dialog, not a multi-line textbox; we can use Enter for tabbing
this.SelectNextControl(this.ActiveControl, true, true, true, true);
return true;
}
}
return base.ProcessCmdKey(ref msg, keyData);
但是如果我想按一次按钮然后再次移动到新控件怎么办?有没有办法手动调用这个 ProcessCmdKey ?