用委托与事件的方法创建菜单

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

posted @ 2008-07-15 17:51  谢杰  阅读(309)  评论(0编辑  收藏  举报