在 MouseDown 與 Click 都設斷點,執行完 MouseDown 卻未進入 Click。為什麼?
MouseDown → MouseUp → Click:標準順序要求同一控件在 MouseDown 後未移出滑鼠、且在系統雙擊時間內完成 MouseUp。MouseDown 內執行耗時操作、彈出模態對話框、或 Capture 變更,可能導致 MouseUp 不在該控件上,系統判定非有效點擊,不觸發 Click。MouseUp/Click 觸發。// 方式 1:呼叫受保護的 OnClick(推薦,觸發完整事件鏈)
pictureBox1.GetType().GetMethod("OnClick",
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)
?.Invoke(pictureBox1, new object[] { EventArgs.Empty });
// 方式 2:直接引發 Click 事件(需自訂事件存取器或繼承控件)
// 方式 3:PerformClick() —— 僅限 Button 等支援的控件
button1.PerformClick();
DoSomething(),MouseDown、Click 分別呼叫,而非相互觸發。Click 或異步任務。Debug.WriteLine 或 Trace 替代斷點觀察事件順序,避免阻塞訊息泵。MouseDown 不保證觸發 Click;需滿足「同控件、未移出、時限內 Up」條件。手動觸發請用 PerformClick() 或反射呼叫 OnClick,業務邏輯請提煉共用方法而非事件互調。