C# ToolStrip在父窗体失去焦点时,点击里面的按钮无效

  C#里面ToolStrip控件,在父窗体失去焦点的情况下,第一次点击ToolStrip上面的按钮,只是让父窗体获得焦点,并不会引发按钮的Click事件。要执行按钮操作必须再点击一次。相当于说,在父窗体失去焦点的情况,必须点击两次才能真正执行Click按钮操作,相当不符合大众的操作习惯。

  不过解决这个问题,其实也相当容易,只要自定义一个类,从系统的ToolStrip继承,然后重写它的WndProc方法即可。

public class ToolStripEx : ToolStrip
{
    protected override void WndProc(ref Message m)
    {
        const int WM_MOUSEACTIVATE = 0x21;

        if (m.Msg == WM_MOUSEACTIVATE && this.CanFocus && !this.Focused)
            this.Focus();

        base.WndProc(ref m);
    }
}
原文地址:https://www.cnblogs.com/wzwyc/p/6292693.html