首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 處理滑鼠與鍵盤事件完整指南

     編輯:關於C#

前言

在 Windows Forms 應用程式中,使用者透過滑鼠與鍵盤進行互動是最基本的操作方式。掌握如何在 C# 中正確處理這些輸入事件,不僅能建立更直觀的使用者介面,也是開發遊戲、繪圖工具或互動式應用的基礎。本文將系統性地介紹滑鼠與鍵盤相關事件的註冊方式、事件參數運用,以及常見的實務處理技巧。

開發環境說明

本文範例基於現代 .NET 環境(.NET 6/7/8 或 .NET Framework 4.7.2+)撰寫,概念適用於所有版本的 C# Windows Forms 開發。

一、滑鼠事件處理

1.1 常見滑鼠事件概覽

Control 類別提供六個核心滑鼠事件,依觸發時機分類如下:

  • MouseEnter:滑鼠指標進入控制項範圍
  • MouseLeave:滑鼠指標離開控制項範圍
  • MouseHover:滑鼠指標在控制項上方停留一段時間
  • MouseMove:滑鼠在控制項內移動
  • MouseDown:按下滑鼠按鍵
  • MouseUp:釋放滑鼠按鍵

1.2 事件委派與參數類別

前三個事件(Enter/Leave/Hover)使用 EventHandler 委派,參數為 EventArgs;後三個事件(Move/Down/Up)使用 MouseEventHandler 委派,參數為 MouseEventArgs,提供豐富的滑鼠狀態資訊。

1.3 事件訂閱語法

現代 C# 建議使用簡潔的 Lambda 表達式或方法群組註冊事件:

// 滑鼠進入/離開/懸停事件
button1.MouseEnter += (sender, e) => { /* 處理邏輯 */ };
button1.MouseLeave += Button1_MouseLeave;

// 滑鼠移動/按下/釋放事件
button1.MouseMove += Button1_MouseMove;
button1.MouseDown += Button1_MouseDown;
button1.MouseUp += Button1_MouseUp;

1.4 事件處理方法簽章

// 簡易事件處理器
private void Button1_MouseLeave(object sender, EventArgs e)
{
    // 回應滑鼠離開邏輯
}

// 攜帶滑鼠座標與按鍵資訊的處理器
private void Button1_MouseMove(object sender, MouseEventArgs e)
{
    int x = e.X;          // 相對控制項左上角的 X 座標
    int y = e.Y;          // 相對控制項左上角的 Y 座標
    MouseButtons btn = e.Button; // 目前按下的按鍵
}

private void Button1_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
        MessageBox.Show("按下左鍵");
    else if (e.Button == MouseButtons.Right)
        MessageBox.Show("按下右鍵");
}

1.5 實務範例:即時顯示滑鼠座標與按鍵判斷

以下完整程式碼示範在表單上移動滑鼠時於標題列顯示座標,點擊時彈出按鍵資訊:

using System;
using System.Windows.Forms;

public class MouseDemoForm : Form
{
    public MouseDemoForm()
    {
        this.Text = "C# 滑鼠事件示範";
        this.MouseMove += Form_MouseMove;
        this.MouseDown += Form_MouseDown;
    }

    private void Form_MouseMove(object sender, MouseEventArgs e)
    {
        this.Text = $"目前滑鼠位置:({e.X}, {e.Y})";
    }

    private void Form_MouseDown(object sender, MouseEventArgs e)
    {
        string msg = e.Button switch
        {
            MouseButtons.Left => "按下滑鼠左鍵!",
            MouseButtons.Right => "按下滑鼠右鍵!",
            MouseButtons.Middle => "按下滑鼠中鍵!",
            _ => "按下其他鍵"
        };
        MessageBox.Show(msg);
    }

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MouseDemoForm());
    }
}

滑鼠事件執行畫面

圖 01:滑鼠座標與按鍵偵測執行畫面

二、鍵盤事件處理

2.1 核心鍵盤事件

  • KeyDown:按下按鍵(含功能鍵、修飾鍵)
  • KeyUp:釋放按鍵
  • KeyPress:輸入字元鍵(僅字元鍵觸發,不含功能鍵)

2.2 事件委派與參數

KeyDown/KeyUp 使用 KeyEventHandler,參數 KeyEventArgs 提供 KeyCode、Modifiers 等屬性;KeyPress 使用 KeyPressEventHandler,參數 KeyPressEventArgs 提供 KeyChar。

2.3 事件訂閱與處理

// 註冊事件
this.KeyUp += Form_KeyUp;
this.KeyPress += Form_KeyPress;

// 處理按鍵釋放(可偵測功能鍵)
private void Form_KeyUp(object sender, KeyEventArgs e)
{
    MessageBox.Show($"您按下的鍵為:{e.KeyCode}", "按鍵資訊");
}

// 處理字元輸入(適合文字輸入驗證)
private void Form_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!char.IsDigit(e.KeyChar) && e.KeyChar != '\b')
        e.Handled = true; // 僅允許數字與退格鍵
}

2.4 完整鍵盤偵測範例

using System;
using System.Windows.Forms;

public class KeyboardDemoForm : Form
{
    public KeyboardDemoForm()
    {
        this.Text = "C# 鍵盤事件示範";
        this.KeyUp += Form_KeyUp;
    }

    private void Form_KeyUp(object sender, KeyEventArgs e)
    {
        MessageBox.Show(e.KeyCode.ToString(), "您所按下的鍵為:");
    }

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new KeyboardDemoForm());
    }
}

鍵盤事件執行畫面

圖 02:鍵盤按鍵偵測執行畫面

三、進階技巧與注意事項

3.1 表單層級按鍵預覽

設定表單 KeyPreview = true 可讓表單優先於子控制項接收鍵盤事件,方便實作全域熱鍵。

3.2 滑鼠事件順序

單擊流程:MouseDown → MouseClick → MouseUp。雙擊會觸發兩次單擊流程後接 MouseDoubleClick。

3.3 座標系統轉換

使用 PointToScreen/PointToClient 在螢幕座標與控制項座標間轉換。

四、總結

C# 提供完整的事件模型處理滑鼠與鍵盤輸入。理解委派差異、善用事件參數屬性,並配合 KeyPreview 等屬性,即能建立靈活直觀的互動介面。實務上建議:

  1. 滑鼠座標追蹤用 MouseMove 搭配 MouseEventArgs.X/Y
  2. 按鍵判斷用 MouseDown 的 Button 屬性或 KeyUp 的 KeyCode
  3. 文字輸入驗證用 KeyPress 的 KeyChar
  4. 全域熱鍵啟用表單 KeyPreview

這些基礎雖簡單,卻是所有進階互動開發的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved