C# CS 程序为什么不能响应键盘方向键
纠结这个问题很久了,我注册了窗体的KeyDown事件,但是,按下按钮与抬起按钮的时候,没有触发,后来发现是焦点一定要在窗体上,如果新建一个干净的窗体,就能触发,如果添加一个Button就不能触发。
后来我又想到注册当前窗体中所有控件的KeyDown和KeyUp事件,却发现,KeyDown事件不能触发,KeyUp事件能触发,我的需求是想键盘响应上下左方向键。
构造函数
setKeyDown(this.Controls);
setKeyUp(this.Controls);
}
private void setKeyDown(Control.ControlCollection conc)
{
foreach (Control ctl in conc)
{
ctl.KeyDown += new KeyEventHandler(ctl_KeyDown);
if (ctl.HasChildren)
{
setKeyDown(ctl.Controls);
}
}
}
//按钮按下
void ctl_KeyDown(object sender, KeyEventArgs e)
{
MessageBox.Show("按下按钮"+e.KeyCode.ToString(), "KeyDown", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
private void setKeyUp(Control.ControlCollection conc)
{
foreach (Control ctl in conc)
{
ctl.KeyUp += new KeyEventHandler(ctl_KeyUp);
if (ctl.HasChildren)
{
setKeyUp(ctl.Controls);
}
}
}
//按钮抬起
void ctl_KeyUp(object sender, KeyEventArgs e)
{
MessageBox.Show("按钮抬起"+e.KeyCode.ToString(), "KeyUp", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
[其他解释]
窗体的keypreview设置为true。
[其他解释]
主窗体获得焦点的时候才有响应吧...
[其他解释]
答案在一楼 this.keypreview = true; 这个属性高成 true 那么窗体就默认接受 没有处理键盘事件的控件键盘事件
[其他解释]
窗体的属性里先设置下吧。
[其他解释]
该回复于2012-11-18 01:17:25被管理员删除
[其他解释]