Mar*_*ers 6 .net winforms c#-2.0
我有一个带有几个子控件的用户控件.我需要用户界面来响应按键,所以我决定将处理代码放在MainControl_KeyDown事件中.但是,当我在我的应用程序中按下某个键时,此事件不会触发.
我通过一个依赖于使用Windows API的搜索引擎找到了一个解决方案,我希望避免使用它,因为对于.NET框架正确支持的功能而言似乎有些过分.
Mas*_*oud 11
您可以添加以下方法给您usercontrol:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if ((keyData == Keys.Right) || (keyData == Keys.Left) ||
(keyData == Keys.Up) || (keyData == Keys.Down))
{
//Do custom stuff
//true if key was processed by control, false otherwise
return true;
}
else
{
return base.ProcessCmdKey(ref msg, keyData);
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这个线程有点旧,但我有一个类似的问题,并以不同的方式处理它:
在主窗口中,我将KeyPreview属性更改为true.我在用户控件中注册了主窗口的KeyDown事件处理程序.
this.Parent.KeyDown += new KeyEventHandler(MyControl_KeyDown);
Run Code Online (Sandbox Code Playgroud)
这可以防止我将每个子控件的KeyDown事件路由到我的用户控件.
当然,卸载用户控件时删除事件处理程序非常重要.
我希望这能帮助那些现在遇到类似问题的人.
您可以为用户控件中的每个子控件添加一个KeyDown事件处理程序,并在每个控件中触发用户控件的KeyDown事件,如下所示:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
this.OnKeyDown(e);
}
Run Code Online (Sandbox Code Playgroud)