使用滑鼠的概觀 (Windows Forms .NET)

接收和處理滑鼠輸入是每個 Windows 應用程式的重要部分。 您可以處理滑鼠事件以在應用程式中執行動作,或使用滑鼠位置資訊來執行點擊測試或其他動作。 此外,您也可以變更應用程式控制項處理滑鼠輸入的方式。 本文詳細說明這些滑鼠事件,以及如何取得和變更滑鼠的系統設定。

重要

.NET 7 和 .NET 6 的桌面指南檔正在建置中。

在 Windows Forms 中,使用者輸入會以 Windows 訊息 的形式 傳送至應用程式。 一系列的可覆寫方法會在應用程式、表單和控制層級處理這些訊息。 當這些方法接收滑鼠訊息時,它們會引發可處理以取得滑鼠輸入相關資訊的事件。 在許多情況下,Windows Forms 應用程式只要處理這些事件即可處理所有使用者輸入。 在其他情況下,應用程式可能會覆寫處理訊息以攔截特定訊息的方法之一,再由應用程式、表單或控制項接收。

滑鼠事件

所有 Windows Forms 控制項都會繼承一組與滑鼠和鍵盤輸入相關的事件。 例如,控制項可以處理 MouseClick 事件,以判斷按一下滑鼠的位置。 如需滑鼠事件的詳細資訊,請參閱 使用滑鼠事件

滑鼠位置和點擊測試

當使用者移動滑鼠時,作業系統會移動滑鼠指標。 滑鼠指標包含稱為作用點的單一圖元,作業系統會追蹤並辨識為指標的位置。 當使用者移動滑鼠或按下滑鼠按鍵時, Control 包含 HotSpot 的 會引發適當的滑鼠事件。

您可以在處理滑鼠事件時,或使用 類別的 Cursor 屬性,取得目前滑鼠位置 Location 與 的 屬性 MouseEventArgsPosition 接著,您可以使用滑鼠位置資訊來執行點擊測試,然後根據滑鼠的位置執行動作。 點擊測試功能內建于 Windows Forms 中的數個控制項,例如 ListViewTreeViewMonthCalendarDataGridView 控制項。

例如,搭配適當的滑鼠事件使用時, MouseHover 點擊測試對於判斷應用程式何時應該執行特定動作非常有用。

變更滑鼠輸入設定

您可以藉由衍生自 控制項並使用 和 SetStyle 方法,來偵測和 GetStyle 變更控制項處理滑鼠輸入的方式。 SetStyle方法會採用值的位元組合 ControlStyles ,以判斷控制項是否會有標準點選、按兩下行為,或控制項是否會處理自己的滑鼠處理。 此外,類別 SystemInformation 也包含描述滑鼠功能的屬性,並指定滑鼠如何與作業系統互動。 下表摘要說明這些屬性。

屬性 說明
DoubleClickSize 取得使用者必須按一下兩次,才能讓作業系統考慮按兩下兩次的區域維度,以圖元為單位。
DoubleClickTime 取得可在第一次按一下之間經過的毫秒數上限,以及滑鼠動作要視為按兩下的第二次按一下。
MouseButtons 取得滑鼠上的按鈕數目。
MouseButtonsSwapped 取得值,指出是否已調換滑鼠左右按鈕的功能。
MouseHoverSize 取得矩型的維度 (以像素為單位),滑鼠指標必須在此範圍內停留一段滑鼠暫留時間,才能產生滑鼠暫留訊息。
MouseHoverTime 取得時間 (以毫秒為單位),滑鼠指標在該段時間內必須停留在停留矩形內,才能產生滑鼠停留訊息。
MousePresent 取得值,指出是否安裝滑鼠。
MouseSpeed 取得值,指出目前的滑鼠速度,從 1 到 20。
MouseWheelPresent 取得值,指出是否已安裝具有滑鼠滾輪的滑鼠。
MouseWheelScrollDelta 取得單一滑鼠滾輪旋轉增量的差異值量。
MouseWheelScrollLines 取得轉動滑鼠滾輪時要捲動的行數。

處理使用者輸入訊息的方法

表單和控制項可以存取 IMessageFilter 介面和一組可覆寫的方法,以處理訊息佇列中不同點的 Windows 訊息。 這些方法都有參數 Message ,其會封裝 Windows 訊息的低階詳細資料。 您可以實作或覆寫這些方法來檢查訊息,然後取用訊息,或將它傳遞給訊息佇列中的下一個取用者。 下表顯示處理 Windows Forms 中所有 Windows 訊息的方法。

方法 注意
PreFilterMessage 這個方法會攔截應用層級的已排入佇列(也稱為已張貼)Windows 訊息。
PreProcessMessage 此方法會在處理表單和控制項層級之前攔截 Windows 訊息。
WndProc 此方法會處理表單和控制項層級的 Windows 訊息。
DefWndProc 這個方法會在表單和控制層級執行 Windows 訊息的預設處理。 這會提供視窗的最低功能。
OnNotifyMessage 此方法會在處理訊息之後攔截表單和控制項層級的訊息。 EnableNotifyMessage必須設定樣式位,才能呼叫這個方法。

另請參閱