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

Windows Forms 選單設計完全指南 (8):回應選單事件

     編輯:關於C語言

五、回應選單事件

在選單程式設計中,我們需要使用者點擊選單項目時,程式能執行對應命令或改變選單狀態,以實現良好的使用者互動。這就需要撰寫選單事件的回應函式,使其執行相應功能。

Windows Forms 選單事件概覽

MenuItem 類別提供了豐富的事件,主要包含:

  • Click 事件:使用者點擊選單項目時觸發,最常使用的事件。
  • DrawItem 事件:繪製選單項目時觸發,適用於自訂繪製選單。
  • Select 事件:選取選單項目時觸發。

透過為這些事件撰寫回應方法,我們即可使用選單控制程式流程。

C# 事件處理機制:Delegate 與 += / -= 運算子

C# 引入 delegate(委派)型別解決事件處理問題。委派類似 C 語言的函式指標,但具備型別安全與受控代碼特性。您可以使用 += 運算子輕鬆為 .NET 物件的事件新增一個或多個回應方法;使用 -= 運算子移除這些回應方法。

基本語法範例

// 為按鈕 button1 的 Click 事件新增回應方法
button1.Click += new System.EventHandler(Test);

// 事件處理方法簽章
private void Test(object sender, System.EventArgs e)
{
    // 具體執行程式碼
}

事件處理方法包含兩個參數:

  • sender:觸發事件的物件,型別為 object 以適用所有物件類型。
  • e:事件相關資料(如滑鼠座標等),具體型別依事件類型而定。

如何知道事件處理方法的參數型別?

可透過查看類別中事件的宣告來確定。例如 Button 類別的 Click 事件(繼承自 Control):

public event EventHandler Click;

其中 EventHandler 為委派型別,定義如下:

public delegate void EventHandler(object sender, EventArgs e);

為選單項目新增事件回應方法

與所有 .NET 物件相同,為選單項目新增 Click 事件回應方法採用相同模式:

// 建立主選單並新增兩個選單項目
this.Menu = new MainMenu(new MenuItem[] {
    new MenuItem("檔案(&F)"), 
    new MenuItem("編輯(&E)")
});

// 為第一個選單項目(索引 0)新增兩個 Click 事件處理器
this.Menu.MenuItems[0].Click += new System.EventHandler(Test);
this.Menu.MenuItems[0].Click += new System.EventHandler(MenuItem2_Click);

private void Test(object sender, System.EventArgs e)
{
    // 具體執行程式碼
}

private void MenuItem2_Click(object sender, System.EventArgs e)
{
    MessageBox.Show("您點擊了第二個選單項目", "提示訊息");
}

為選單項目新增 DrawItem 事件

若要為選單項目(如 menuItem1)新增 DrawItem(繪製)事件回應方法:

menuItem1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(MyMethod);

private void MyMethod(object sender, DrawItemEventArgs e)
{
    // 注意第二個參數為 DrawItemEventArgs
    MessageBox.Show("DrawItem 事件被觸發", "提示訊息");
}

重點提示

前文已說明選單項目是構成各類選單的基本元素。由於我們直接透過存取選單項目來新增事件回應方法,因此為選單新增事件回應方法與主選單或彈出式選單無關,統一操作 MenuItem 物件即可。

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