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