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

标签 c# winforms

我对 C# 比较陌生。我有一个带按钮的窗口。如果窗口没有焦点并且我第一次单击按钮,第一次单击会为窗口获取焦点,所有后续单击将执行它们各自的操作。

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

最佳答案

听起来您正在描述 ToolStrip 的操作方式,除非应用程序具有焦点,否则不会触发点击事件。

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

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);
  }
}

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

关于c# - 无论我的表单是否具有焦点,我都可以确保我的控件捕获第一个事件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11321086/

相关文章:

c# - SyndicationItem.Content 为空

c# - 为什么我可以安全地转换为 int 而不能转换为 int?

c# - 单声道移植问题

c# - 如何在 WPF 中创建自己的 GUI 组件?

c# - 为什么 Animals[] animals = new Cat[5] 编译,但 List<Animal> animals = new List<Cat>() 不编译?

c# - 在 wpf 网络浏览器中捕获和取消新窗口打开事件

c# - 如何将对象从组合框选择的项目转换为字符串

c# - 在 C# 中使用热键

winforms - 如何将 Designer 生成类的基类从 System.Windows.Forms.Form 更改为我自己的 BaseForm

c# - 在 WinForm 中验证数据