窗口的菜单是由数据库中读出的,请问怎么加上相应的单击事件

解决方案 »

  1.   

     private ToolStripMenuItem dToolStripMenuItem = new ToolStripMenuItem ();
    //下面这行代码就是为动态添加的菜单添加事件
    this.dToolStripMenuItem.Click += new System.EventHandler(this.dToolStripMenuItem_Click);
      

  2.   

    在创建菜单以后执行下面代码为该菜单注册时间,就好了
    this.dToolStripMenuItem.Click += new System.EventHandler(this.dToolStripMenuItem_Click);
      

  3.   

    问题是怎么知道响应哪个this.dToolStripMenuItem_Click
      

  4.   

    问题是怎么知道响应哪个this.dToolStripMenuItem_Click你在事件的处理方法的参数中,把sender那个参数强制转换成button,然后读出button.Text,就知道点的是哪个按钮了.
    试一下
      

  5.   

    使用上面代码,注册好事件以后,会在窗体里面为你自动创建一个函数
    this.dToolStripMenuItem.Click += new System.EventHandler(this.dToolStripMenuItem_Click);//下面这个函数是你注册号事件以后系统为你生成的,你将要执行的代码写到这个函数里面,当点击这个菜单的时候就会调用该函数。
    void dToolStripMenuItem_Click(object sender,EventArgs e)
    {}
      

  6.   

     
            private void aa()
            {
                ContextMenuStrip SubMenu = new ContextMenuStrip();
                SubMenu.Items.Add("點我", null, new EventHandler(MenuItem_Click));
                SubMenu.Show();
            }
            private void MenuItem_Click(object sender, System.EventArgs e)
            { 
                // do some thing
            }
      

  7.   

    //反射
    Type menuType =yourmenuitem.GetType();EventInfo myEvent = menuType.GetEvent("onClick"); myEvent.AddEventHandler(yourmenuitem, Delegate.CreateDelegate(myEvent.EventHandlerType, this, "yourmenuitem_onclick"));
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
      

  8.   

    private ToolStripMenuItem item = new ToolStripMenuItem ();item.Click += delegate{
    //这里写该菜单的处理代码
    };contextStrip.Items.Add(item);
      

  9.   

    进行注册   for (int i = 0; i <= 100; i++)
       {
            ToolStripMenuItem tsmMenu = new ToolStripMenuItem();
            tsmMenu.Name = i.ToString();  //假设计读取的名称
            tsmMenu.Click += new EventHandler(tsmMenu_Click);
       }   void tsmMenu_Click(object sender, EventArgs e)
       {
          ToolStripMenuItem tsmMenu = sender as ToolStripMenuItem;
          switch (tsmMenu.Name)
          {
                    case "1":
                        --操作
                        break;
                    case "2":
                        --操作
                        break;
                    --其他菜单
          }
       }
      

  10.   

    如果你想直接实现一个动态添加的菜单的处理事件的话:
    private void addMenuItem()
            {
                System.Windows.Forms.ContextMenuStrip cms = new ContextMenuStrip();
                ToolStripMenuItem item = new ToolStripMenuItem("Add");
                item.Click += delegate { MessageBox.Show(string.Format("menu:{0} clicked.", item.Text)); };
                cms.Items.Add(item);
                this.listView1.ContextMenuStrip = cms;
            }
    如果你需要把动态菜单的事件指向一个具体的菜单单击方法,并且只知道该方法的名称,那么就用反射。不过我怀疑上面的应该能够满足你的要求了。
      

  11.   


    窗体代码,实现动态菜单添加
    namespace CaptueViedo
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                for (int i = 0; i <= 10; i++)
                {                ToolStripMenuItemEx item = new ToolStripMenuItemEx(i, "菜单:" + i.ToString());
                    item.Click += new EventHandler(item_Click);
                    主菜单ToolStripMenuItem.DropDownItems.Add(item);            }
            }        void item_Click(object sender, EventArgs e)
            {
                ItemClickEventArts ex = e as ItemClickEventArts;
                MessageBox.Show("当前点击的是菜单" + ex.ID.ToString());
            }
          
        }
    }//继承ToolStripMenuItem 菜单项对象 并且重写 OnClick 事件,添加自己定义事件对象
     public class ToolStripMenuItemEx : ToolStripMenuItem
        {        private int id;
            public ToolStripMenuItemEx(int ID, string text)
                : base(text)
            {
                id = ID;
            }
            protected override void OnClick(EventArgs e)
            {
                ItemClickEventArts bb = new ItemClickEventArts(id);
                base.OnClick(bb);
            }
        }//自定义事件对象
    public class ItemClickEventArts : EventArgs
        {
            public ItemClickEventArts(int Id)
                : base()
            {
                this.id = id;
            }
            private int id;
            public int ID
            {
                get
                {
                    return this.id;
                }
                set
                {
                    this.id = value;
                }
            }
        }这样楼主应该很清楚了,以上代码测试通过