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);
   }
}
我知道这个线程有点旧,但我有一个类似的问题,并以不同的方式处理它:
在主窗口中,我将KeyPreview属性更改为true.我在用户控件中注册了主窗口的KeyDown事件处理程序.
this.Parent.KeyDown += new KeyEventHandler(MyControl_KeyDown);
这可以防止我将每个子控件的KeyDown事件路由到我的用户控件.
当然,卸载用户控件时删除事件处理程序非常重要.
我希望这能帮助那些现在遇到类似问题的人.
您可以为用户控件中的每个子控件添加一个KeyDown事件处理程序,并在每个控件中触发用户控件的KeyDown事件,如下所示:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    this.OnKeyDown(e);
}