窗体代码,实现动态菜单添加 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; } } }这样楼主应该很清楚了,以上代码测试通过
//下面这行代码就是为动态添加的菜单添加事件
this.dToolStripMenuItem.Click += new System.EventHandler(this.dToolStripMenuItem_Click);
this.dToolStripMenuItem.Click += new System.EventHandler(this.dToolStripMenuItem_Click);
试一下
this.dToolStripMenuItem.Click += new System.EventHandler(this.dToolStripMenuItem_Click);//下面这个函数是你注册号事件以后系统为你生成的,你将要执行的代码写到这个函数里面,当点击这个菜单的时候就会调用该函数。
void dToolStripMenuItem_Click(object sender,EventArgs e)
{}
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
}
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/
//这里写该菜单的处理代码
};contextStrip.Items.Add(item);
{
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;
--其他菜单
}
}
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;
}
如果你需要把动态菜单的事件指向一个具体的菜单单击方法,并且只知道该方法的名称,那么就用反射。不过我怀疑上面的应该能够满足你的要求了。
窗体代码,实现动态菜单添加
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;
}
}
}这样楼主应该很清楚了,以上代码测试通过