使用滑鼠事件 (Windows Forms .NET)
大部分的 Windows Forms 程式藉由處理滑鼠事件來處理滑鼠輸入。 本文會提供滑鼠事件的概觀,包含何時使用每個事件的詳細資訊,以及提供給每個事件的資料。 如需一般事件的詳細資訊,請參閱事件概觀 (Windows Forms .NET)。
滑鼠事件
回應滑鼠輸入的主要方法是處理滑鼠事件。 下表顯示滑鼠事件,並描述其會於何時引發。
滑鼠事件 | 描述 |
---|---|
Click | 此事件發生於放開滑鼠按鍵時,通常會在 MouseUp (部分機器翻譯) 事件之前發生。 這個事件的處理常式會接收 EventArgs 類型的引數。 當您只需要判斷按一下何時發生時,請處理此事件。 |
MouseClick | 此事件發生於使用者用滑鼠按一下控制項時。 這個事件的處理常式會接收 MouseEventArgs 類型的引數。 當您需要取得發生按一下的情況下滑鼠的相關資訊時,請處理此事件。 |
DoubleClick | 此事件發生於按兩下控制項時。 這個事件的處理常式會接收 EventArgs 類型的引數。 當您只需要判斷按兩下何時發生時,請處理此事件。 |
MouseDoubleClick | 此事件發生於使用者用滑鼠按兩下控制項時。 這個事件的處理常式會接收 MouseEventArgs 類型的引數。 當您需要取得發生按兩下的情況下滑鼠的相關資訊時,請處理此事件。 |
MouseDown | 此事件發生於滑鼠指標位於控制項上,且使用者按滑鼠按鍵時。 這個事件的處理常式會接收 MouseEventArgs 類型的引數。 |
MouseEnter | 此事件發生於滑鼠指標進入控制項的框線或工作區時 (取決於控制項的類型)。 這個事件的處理常式會接收 EventArgs 類型的引數。 |
MouseHover | 此事件發生於滑鼠指標停下並留在控制項上時。 這個事件的處理常式會接收 EventArgs 類型的引數。 |
MouseLeave | 此事件發生於滑鼠指標離開控制項的框線或工作區時 (取決於控制項的類型)。 這個事件的處理常式會接收 EventArgs 類型的引數。 |
MouseMove | 此事件發生於滑鼠指標原本停留在控制項上並開始移動時。 這個事件的處理常式會接收 MouseEventArgs 類型的引數。 |
MouseUp | 此事件發生於滑鼠指標在控制項上,且使用者放開滑鼠按鍵時。 這個事件的處理常式會接收 MouseEventArgs 類型的引數。 |
MouseWheel | 此事件發生於使用者在焦點位於控制項的情況下旋轉滑鼠滾輪時。 這個事件的處理常式會接收 MouseEventArgs 類型的引數。 您可以使用 Delta (部分機器翻譯) 的 MouseEventArgs (部分機器翻譯) 屬性來判斷滑鼠捲動的距離。 |
滑鼠資訊
MouseEventArgs 會傳送至有關點按滑鼠按鈕和追蹤滑鼠移動之滑鼠事件的處理常式。 MouseEventArgs 提供滑鼠目前狀態的相關資訊,包括滑鼠指標在用戶端座標中的位置、按了哪個滑鼠按鈕,以及是否已捲動滑鼠滾輪。 有幾個滑鼠事件 (例如滑鼠指標進入或離開控制項界限時引發的事件) 會傳送 EventArgs 至事件處理常式,而沒有進一步的資訊。
如果您想要知道滑鼠按鈕的目前狀態或滑鼠指標的位置,而且您想要避免處理滑鼠事件,您也可以使用 MouseButtons 類別的 MousePosition 和 Control 屬性。 MouseButtons 會傳回目前按下哪些滑鼠按鈕的相關資訊。 MousePosition 會傳回滑鼠指標的螢幕座標,等於 Position 所傳回的值。
在螢幕與用戶端座標之間轉換
因為有些滑鼠位置資訊是在用戶端座標中,而有些是在螢幕座標中,所以您可能需要將某個點從一個座標系統轉換到另一個座標系統。 使用 PointToClient 類別中所提供的 PointToScreen 和 Control 方法,可讓您輕鬆執行此作業。
標準點擊事件行為
如果您想要以適當順序來處理滑鼠點按事件,您需要知道在 Windows Form 控制項中引發點按事件的順序。 除了下列清單中註明的個別控制項,當按下並放開任何支援的滑鼠按鈕時,所有 Windows Form 控制項都是以相同順序引發點按事件。 以下是針對按一下滑鼠按鈕時,所引發的事件順序:
- MouseDown 事件。
- Click 事件。
- MouseClick 事件。
- MouseUp 事件。
以下是針對按兩下滑鼠按鈕時,所引發的事件順序:
MouseDown 事件。
Click 事件。
MouseClick 事件。
MouseUp 事件。
MouseDown 事件。
DoubleClick 事件。
依據有問題的控制項是否將 StandardDoubleClick 樣式位元設為
true
,這會有所不同。 如需有關如何設定 ControlStyles 位元的詳細資訊,請參閱 SetStyle 方法。MouseDoubleClick 事件。
MouseUp 事件。
個別控制項
下列控制項不符合標準滑鼠點按事件行為:
-
注意
針對 ComboBox 控制項,如果使用者按一下編輯欄位、按鈕或是清單中的項目,就會發生下述事件行為。
- 按一下滑鼠左鍵:Click、MouseClick
- 按一下滑鼠右鍵:不會引發點按事件
- 按兩下滑鼠左鍵:Click、MouseClick、Click、MouseClick
- 按兩下滑鼠右鍵:不會引發點擊事件
TextBox、RichTextBox、ListBox、MaskedTextBox 和 CheckedListBox 控制項
注意
當使用者在這些控制項內的任何位置按一下,就會發生下述事件行為。
- 按一下滑鼠左鍵:Click、MouseClick
- 按一下滑鼠右鍵:不會引發點按事件
- 按兩下滑鼠左鍵:Click、MouseClick、DoubleClick、MouseDoubleClick
- 按兩下滑鼠右鍵:不會引發點擊事件
ListView控制項
注意
唯有當使用者按一下 ListView 控制項中的項目,才會發生下述事件行為。 在控制項上任何其他地方按一下,都會不引發任何事件。 如果您想要使用驗證來搭配 BeforeLabelEdit 控制項,除了下述事件,您可能也會想要了解 AfterLabelEdit 和 ListView 事件。
- 按一下滑鼠左鍵:Click、MouseClick
- 按一下滑鼠右鍵:Click、MouseClick
- 按兩下滑鼠左鍵:Click、MouseClick、DoubleClick、MouseDoubleClick
- 按兩下滑鼠右鍵:Click、MouseClick;DoubleClick、MouseDoubleClick
TreeView控制項
注意
唯有當使用者按一下 TreeView 控制項中的項目本身,或是項目右邊,才會發生下述事件行為。 在控制項上任何其他地方按一下,都會不引發任何事件。 如果您想要使用驗證來搭配 BeforeCheck 控制項,除了下述事件,您可能也會想要了解 BeforeSelect、BeforeLabelEdit、AfterSelect、AfterCheck、AfterLabelEdit 和 TreeView 事件。
- 按一下滑鼠左鍵:Click、MouseClick
- 按一下滑鼠右鍵:Click、MouseClick
- 按兩下滑鼠左鍵:Click、MouseClick、DoubleClick、MouseDoubleClick
- 按兩下滑鼠右鍵:Click、MouseClick;DoubleClick、MouseDoubleClick
切換控制項的繪製行為
切換控制項 (例如衍生自 ButtonBase 類別的控制項) 與滑鼠點按事件搭配組合,具有下列特殊繪圖行為:
使用者按下滑鼠按鈕。
控制項會以所按下的狀態繪製。
便會引發 MouseDown 事件。
使用者放開滑鼠按鈕。
控制項會以所引發的狀態繪製。
便會引發 Click 事件。
便會引發 MouseClick 事件。
便會引發 MouseUp 事件。
注意
如果使用者在按下滑鼠按鈕的同時,將指標移出切換控制項 (例如在按下滑鼠按鈕的同時,將滑鼠從 Button 控制項移開),切換控制項將會以所引發的狀態繪製,而且只會發生 MouseUp 事件。 在此情況下,不會發生 Click 或 MouseClick 事件。