2009-06-01 46 views
4

我正在開發自定義控件並意識到我的代碼正在運行兩次。這不是一個真正的問題(它只是一個Focus方法調用)。不過,我想了解它。正確使用OnClick和MouseClick事件在Windows Forms應用程序中使用C#

通過閱讀MSDN description for click | onclick event,它指出:

觸發,當用戶點擊在物體上的鼠標左鍵。

因此,我添加了OnClick事件和MouseClick事件來處理左側和右側單擊。但在調試代碼後,我發現OnClick處理左右兩個事件。

爲什麼OnClick會同時處理這兩個事件,並且出於某種原因,我忽略了這兩個事件嗎?

protected override void OnClick(EventArgs e) 
{ 

    this.Focus(); 
    base.OnClick(e); 
} 

private void CustomControl_MouseClick(object sender, MouseEventArgs e) 
{  
    if (e.Button == MouseButtons.Right) 
    { 
     rightClickMenu(e); 
    } 
} 
+0

你爲什麼要在Focus中點擊鼠標?此外,您的鏈接引用html元素點擊事件&不適用於winforms。 – shahkalpesh 2009-06-01 20:21:39

+0

我認爲這是自定義控件所必需的。如果沒有,我會研究,看看它什麼時候發生。或者,如果我甚至必須自己打電話。 AHHH沒有收到鏈接上的html元素...我現在感覺大約2英寸高!謝謝您的幫助! – Billy 2009-06-01 20:28:12

+1

在Windows窗體中,有兩種不同的處理點擊事件的方法:MouseClick和Click。 – 2011-02-27 03:34:41

回答

11

According to MSDN,Click事件不僅在單擊鼠標時,而且在按下Enter按鈕時被調用。如果您只需要處理鼠標點擊,我會將所有代碼移到MouseClick事件中。因爲Click事件不會告訴你點擊了哪個鼠標按鈕(如果有的話),所以你不能這樣做。

0

你不應該需要同時有兩個事件...只要保持OnClick。

而且,我還沒有做過很長一段時間Windows窗體,但我覺得有一個更好的方式來接受焦點不是手動設置它的點擊事件,但我不能告訴你這是具體是什麼..我認爲這是一個財產或什麼的。

0

在Winforms中,單擊鼠標鍵時會引發Click事件。

-3

的onclick和CustomControl_MouseClick 是同一事件

你可以有你想要多少方法連接到一個事件(this.Click + = ...)

6

首先,你的鏈接不正確,它鏈接到HTML和DHTML參考,並不WinForms的:) 正確的鏈接是Control.MouseClick event
你需要重寫只有一個方法。如果只想處理鼠標點擊 - 重寫OnMouseClick()並且不處理MouseClick事件,否則 - 重寫OnClick()並且不重寫OnMouseClick()。

0

如果我的記憶功能正確,點擊鼠標和「Enter」鍵,甚至使用「Tab」鍵將焦點設置在控件上,然後使用「Space」或「Enter」點擊它。

如果此類行爲是可接受的/需要的,您可以執行以下操作。

我有這個解決辦法的DoubleClick事件......

void ControlClick(object sender, EventArgs e) 
{ 
    MouseEventArgs mEvt=e as MouseEventArgs; // or (MouseEventArgs)e; 

    // now mEvt has the same properties as 'e' in MouseClick event 
} 

希望這有助於。

-Nurchi

相關問題