无论表单是否具有焦点,我都可以确保我的控件能够捕获第一个事件吗?

kar*_*ran 4 c# winforms

我对C#比较陌生.我有一个带按钮的窗口.如果窗口没有聚焦,我第一次点击按钮,第一次点击会抓住窗口的焦点,所有后续点击将执行各自的操作.

有没有办法执行与按钮关联的事件而不是抓住焦点?

Lar*_*ech 11

听起来您正在描述ToolStrips如何操作,除非应用程序具有焦点,否则不会触发单击事件.

解决方法是使用您自己的ToolStrip并让鼠标激活为控件提供焦点,然后让按钮触发它的click事件:

public class ToolStripIgnoreFocus : ToolStrip {
  private const int WM_MOUSEACTIVATE = 0x21;

  protected override void WndProc(ref Message m) {
    if (m.Msg == WM_MOUSEACTIVATE && this.CanFocus && !this.Focused)
      this.Focus();

    base.WndProc(ref m);
  }
}
Run Code Online (Sandbox Code Playgroud)

重建您的解决方案,您应该ToolStripIgnoreFocus在工具箱中看到可用的控件.尝试将其添加到表单中,然后相应地添加工具按钮.

  • 它是WM_MOUSEACTIVATE,未激活。很好的修复。 (2认同)