C# 窗口失去焦点后更新ToolstripDropdownButton时出现问题

C# 窗口失去焦点后更新ToolstripDropdownButton时出现问题,c#,winforms,focus,toolstrip,toolstripdropdown,C#,Winforms,Focus,Toolstrip,Toolstripdropdown,让我从一个简单的例子开始重现我的问题: 创建WinForms项目 在上面放一个工具条 在其中制作一个ToolstripDropdownButton(没有子项) 将click事件处理程序添加到按钮,如下所示: MessageBox.Show("text", "Caption"); (重点是使主窗体失去焦点) 为了使问题更加明显,让我们做一些不必要的补充: 将ToolStip的RenderMode设置为ManagerRenderMode 将其“自动调整大小”设置为false,并使其变大 这应该足以

让我从一个简单的例子开始重现我的问题:

  • 创建WinForms项目
  • 在上面放一个工具条
  • 在其中制作一个ToolstripDropdownButton(没有子项)
  • 将click事件处理程序添加到按钮,如下所示:

    MessageBox.Show("text", "Caption");
    
    (重点是使主窗体失去焦点)

  • 为了使问题更加明显,让我们做一些不必要的补充:

  • 将ToolStip的RenderMode设置为ManagerRenderMode
  • 将其“自动调整大小”设置为false,并使其变大
  • 这应该足以复制它。运行应用程序并单击按钮。您将得到弹出窗口。关闭弹出窗口,瞧。。。按钮现在看起来好像有人按住了它

    有没有关于如何将其重置为默认状态的想法


    我试着调用按钮重置背景色,刷新。。。也作为工具条。似乎不起作用。也许我遗漏了什么?

    消息框或模式表单会干扰这一点。下拉列表应为子菜单项

    解决方案示例:

    private void toolStripDropDownButton1_Click(object sender, EventArgs e) {
      this.BeginInvoke(new Action(() => MessageBox.Show("Help")));
    }
    

    在哪里添加事件处理程序?如果您正在处理button\u click事件,那么它不应该以这种方式运行,但是如果您正在处理button\u down之类的事情,那么您的主GUI可能会由于交叉线程而停止运行,并失败。正如我所说的,通常是“click event handler”。