首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C# 拖動按鈕不觸發 Click 事件:MouseMove 中暫時取消訂閱 Click

     編輯:程式設計疑難解答

問題

運行時可拖動的 Button,拖動過程會觸發 Click 事件,需抑制。

解決思路

在 MouseDown 和 MouseMove 中暫時取消 Click 事件訂閱,MouseUp 恢復:

private Point _dragStart;

private void btn_MouseDown(object sender, MouseEventArgs e) {
    _dragStart = e.Location;
    btn.Click -= Btn_Click; // 取消
}

private void btn_MouseMove(object sender, MouseEventArgs e) {
    if (e.Button == MouseButtons.Left) {
        btn.Click -= Btn_Click; // 確保取消
        btn.Location = new Point(btn.Left + e.X - _dragStart.X,
                                 btn.Top + e.Y - _dragStart.Y);
    }
}

private void btn_MouseUp(object sender, MouseEventArgs e) {
    _dragStart = e.Location;
    btn.Click += Btn_Click; // 恢復
}

原理:拖動屬於連續移動操作,非點擊意圖,臨時移除 Click 處理器避免誤觸發。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved