代码之家  ›  专栏  ›  技术社区  ›  shadeMe

键事件处理程序不会在窗体级别激发

  •  2
  • shadeMe  · 技术社区  · 14 年前
    {Form constructor}
    this->KeyDown += gcnew KeyEventHandler(this, &Form::Form_KeyDown);
    ...
    
    void Form1::Form_KeyDown(Object^ Sender, KeyEventArgs^ E)
    {
       MessageBox::Show("Key = " + E->KeyCode.ToString(), "Test");
    }
    

    上面的事件处理程序从不触发。但窗体的子控件的处理程序会这样做。有什么问题吗?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Chris Schmich    14 年前

    除了拥有事件处理程序外,还需要设置窗体的 KeyPreview true . 根据MSDN:

    当此属性设置为true时,窗体将接收所有的KeyPress、KeyDown和KeyUp事件。在窗体的事件处理程序完成对击键的处理之后,击键被分配给具有焦点的控件。