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