扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:蔡世友 来源:yesky 2007年11月14日
关键字:
在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事件引发了","提示信息");//弹出一个对话框,显示提示信息。
}
前面我们讲了菜单项是构成各种菜单的基本元素,由于我们添加事件响应方法是直接通过访问菜单项进行的,因此为菜单添加事件响应方法与主菜单或弹出式菜单无关。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者