簡體   English   中英

WinForms禁用雙擊並接受所有鼠標點擊?

[英]WinForms disable double clicks and accept all mouse clicks?

您如何獲得所有點擊以參加活動? 我注意到如果你點擊太快它認為你是雙擊並且沒有將點擊發送到事件處理程序。 有沒有辦法獲得所有點擊?

不確定為什么這個問題得到了賞金,接受的答案應該已經非常接近解決方案了。 除了您應該使用MouseUp而不是MouseDown之外,您的用戶通常希望點擊操作在他釋放按鈕時生效。 這提供了退出“oops,並不意味着點擊它,移動鼠標,因此它被忽略”選項。

然而,對於內置的Winforms控件,如PictureBox,可以使用Control.SetStyle()方法進行配置。 在項目中添加一個新類並粘貼下面顯示的代碼。 編譯。 從工具箱頂部刪除新控件:

using System;
using System.Windows.Forms;

class MyPictureBox : PictureBox {
    public MyPictureBox() {
        this.SetStyle(ControlStyles.StandardDoubleClick, false);
    }
}

但請注意,這不適用於包裝現有本機Windows控件的.NET類。 像TextBox,ListBox,TreeView等。它的基礎配置是WNDCLASSEX.style成員 ,CS_DBLCLKS樣式標志。 設置該樣式標志的代碼將烘焙到Windows中,無法更改。 您需要進行不同類型的手術才能將雙擊返回到單擊。 您可以通過重寫WndProc()方法來實現,我將為TextBox提供一個示例:

using System;
using System.Windows.Forms;

class MyTextBox : TextBox {
    protected override void WndProc(ref Message m) {
        // Change WM_LBUTTONDBLCLK to WM_LBUTTONCLICK
        if (m.Msg == 0x203) m.Msg = 0x201;
        base.WndProc(ref m);
    }
}

如果要對其他控件執行此操作,只需更改類名。 Commandeering Winforms讓它以你想要的方式工作從不需要太多的代碼,只是Petzold :)

您希望使用控件MouseDown事件而不是Click事件。 每次在該控件上“按下”鼠標時都會調用MouseDown。 如果系統認為是雙擊,則可能無法調用Click。 將引發DoubleClick事件。

我想你想要點擊所有點擊。 如果要計算單擊,則設置一個計數器變量並在單擊事件中增加它。 可能對你有幫助....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM