程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Windows Forms菜單設計全攻略(8)

Windows Forms菜單設計全攻略(8)

編輯:關於C語言

五、響應菜單事件

在菜單編程中,我們需要點擊菜單項使程序執行一個命令或者是改變菜單的狀態等。這樣才能使菜單與用戶達到有好的交互。這就需要編寫菜單事件的響應函數,使其執行相應的功能。

在Windows Forms中,MenuItem為我們提供了很多的事件,比如當你在菜單項上點擊時引發的Click事件,在拖動菜單項時引發的DrawItem事件及當選擇菜單項時引發的Select事件等。通過為這些事件編寫響應方法,我們就可以使用菜單來控制程序了。

那麼如何為一個事件添加響應方法呢?在C#中,增加了一個新的數據類型delegate(代表)來解決事件處理問題。代表數據類型非常類似於C語言中的指針,其與指針不同的是,其是代碼是安全的,可管理的。通過使用delegate(代表),你可以通過“+=”(加等於)操作符非常容易地為.Net對象中的一個事件添加一個甚至多個響應方法;還可以通過非常簡單的“-=”(減等於)操作符取消這些響應方法。如下面為一個按鈕(button1)Click事件添加響應方法的代碼:

button1.Click+= new System.EventHandler(Test);

其中Test函數說明如下:

private void Test(object sender, System.EventArgs e)
{
file://想要執行的具體代碼。
}

在上面對事件響應方法Test()的定義中,有兩個參數,一個分別表示引發事件的對象(object)sender,由於引發事件的對象不可預知的,因此我們把其聲明成為object類型,所有的對象都適用;另一個代表引發事件的具體信息(如引發事件時鼠標的x,y值等),由於各種類型的事件中可能不同,這要根據類中事件成員的說明決定。那麼在編程中怎麼知道使用哪種類型呢,這可以通過查看類中事件的聲明,如上面對於Button類Click事件的定義(該定義直接從Control中繼承):

public event EventHandler Click;

在上面聲明事件的語句中,Eventhandler是一個delegate(代表)類型,其是如下定義的:

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

與所有的.Net對象一樣,要為一個菜單項添加Click事件的響應方法也可以通過類似的方法進行,如下所示:

this.Menu=new MainMenu(new MenuItem[]{new MenuItem(“File”),new MenuItem(“Edit”)});
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)
{
file://想要執行的具體代碼。
}
private void MenuItem2_Click(object sender, System.EventArgs e)
{
MessageBox.Show("你點擊了第二個菜單項","提示信息");//彈出一個對話框,顯示提示信息。
}

這樣,當你點擊菜單項時,程序可以執行相應的功能。而要為一個菜單項(如menuItem1)添加DrawItem(拖動)事件響應方法,則可以通過下面的語句實現:

menuItem1.DrawItem+=new System.Windows.Forms.DrawItemEventHandler(MyMethod);//menuItem1為MenuItem對象
private void MyMethod(object sender,DrawItemEventArgs e)//注意函數的弟二個參數
{
MessageBox.Show("DrawItem事件引發了","提示信息");//彈出一個對話框,顯示提示信息。
}

前面我們講了菜單項是構成各種菜單的基本元素,由於我們添加事件響應方法是直接通過訪問菜單項進行的,因此為菜單添加事件響應方法與主菜單或彈出式菜單無關。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved