2012-11-21 49 views
2

與單擊按鈕時發生事件不同,我只希望在雙擊按鈕時發生事件。令人遺憾的是,雙擊事件不會出現在IDE中的事件列表中。WinForms如何調用按鈕上的雙擊事件?

任何人都知道這個問題的一個很好的解決方案?謝謝!

+0

http://msdn.microsoft。 com/en-US/library/system.windows.forms.button.doubleclick(v = vs.80).aspx – JWiley

回答

13

沒有標準按鈕不會對雙擊產生反應。請參閱Button.DoubleClick事件的文檔。它不會對雙擊產生反應,因爲在Windows按鈕中總是對點擊作出反應,而不是雙擊。

你討厭你的用戶嗎?因爲您將創建一個與系統中任何其他按鈕行爲不同的按鈕,並且某些用戶永遠不會知道這一點。

這就是說,你必須創建一個從Button衍生事件給這個獨立的控制(因爲SetStyle是一個受保護的方法)

public class DoubleClickButton : Button 
{ 
    public DoubleClickButton() 
    { 
     SetStyle(ControlStyles.StandardClick | ControlStyles.StandardDoubleClick, true); 
    } 
} 

那麼你必須在你的代碼hanlder手動添加DoubleClick事件因爲它仍然不會出現在IDE中:

public partial class Form1 : Form { 
    public Form1() { 
     InitializeComponent(); 
     doubleClickButton1.DoubleClick += new EventHandler(doubleClickButton1_DoubleClick); 
    } 

    void doubleClickButton1_DoubleClick(object sender, EventArgs e) { 
    } 
} 
+2

你能告訴我如何鏈接這兩個類DoubleClickButton和Form1,我的意思是我們如何設置ControlStyles的一個從不同的類Form1上的按鈕? – Mogli

+0

我不是專家,但setstyle也可以使用沒有繼承在這裏看到答案http://stackoverflow.com/questions/36771882/how-can-i-make-a-button-that-c​​an-sendkeys-into-a -datagridview-so-i-need-to-some – barlop

-1

雙擊只是在彼此的時間t內的兩個常規點擊事件。

以下是一個假設噸一些僞代碼=0.5秒

button.on('click' , function(event) { 
    if (timer is off or more than 0.5 milliseconds) 
     restart timer 
    if (timer is between 0 and 0.5 milliseconds) 
     execute double click handler 
}) 
+3

不要這樣做!您將忽略用戶的雙擊速度設置。如果您按照從按鈕導出的其他答案並創建可雙擊的按鈕,Windows會告訴您它是否是雙擊。 –

+0

它與雙擊單擊無關 – Diego

0

我用於我的物體上添加MouseDoubleClick事件等:

this.pictureBox.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.pictureBox_MouseDoubleClick);

+0

請編輯您的答案以包含一些解釋。僅有代碼的答案對未來SO讀者的教育很少。您的回答是在低質量的審覈隊列中。 – mickmackusa