用委托与事件的方法创建菜单
namespace WindowsFormsApplication8
{
// 定义一个委托
public delegate void ItemClick(string dllAndFormName);
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// 注册事件
this.testToolStripMenuItem.Click +=new EventHandler(this.test);
this.bToolStripMenuItem.Click +=new EventHandler(this.test);
}
// 定义一个事件
public event ItemClick ItemClickEvent;
// 定义一个用来调用事件的方法
public void Call(string dllAndFormName)
{
OnItemClickEvent(dllAndFormName);
}
// 执行事件
protected virtual void OnItemClickEvent(string dllAndFormName)
{
if (ItemClickEvent != null)
{
ItemClickEvent(dllAndFormName);
}
}
// Click事件调用的方法,同时去调用自定义的事件
private void test(object seader, EventArgs e)
{
this.ItemClickEvent += new ItemClick(Form1_ItemClickEvent);
string dllAndFormName = ((ToolStripMenuItem)seader).Tag.ToString();
Call(dllAndFormName);
}
// 执行自定义事件,注意:每次执行完后,必须删除掉注册的事件,因为每次Click都会注册一个事件,否则会执行多次
private void Form1_ItemClickEvent(string dllAndFormName)
{
MessageBox.Show(dllAndFormName);
this.ItemClickEvent -= new ItemClick(Form1_ItemClickEvent);
}
}
}
对于上面的例子来说,是比较的啰嗦的,直接使用签名一致即可
this.testToolStripMenuItem.Click +=new EventHandler(this.test);
private void test(object sender,EventArgs e)
{
// 执行代码
}
详细的例子可以参考:
http://www.cnblogs.com/virusswb/archive/2008/07/03/1234815.html
http://blog.csdn.net/jinjazz/archive/2008/05/06/2397136.aspx