嗨我有一个简单的问题。这是我的代码:
XmlDocument xmlData = new XmlDocument();
xmlData.Load("xml.xml");
/* Load announcements first */
XmlNodeList announcements = xmlData.GetElementsByTagName("announcement");
for (int i = 0; i < announcements.Count; i++)
{
ToolStripMenuItem item = new ToolStripMenuItem();
item.Name = announcements[i].FirstChild.InnerText;
item.Text = announcements[i].FirstChild.InnerText;
/* HERE IS WERE I NEED HELP */
item.Click += new EventHandler();
this.freedomMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { item });
}
xml LastChild保存每个公告的信息。我想创建一个单击事件处理程序,当单击列表项时,会显示一个消息框,其中包含数据。我的问题是我不知道如何动态生成事件处理程序来执行此操作:(
答案 0 :(得分:39)
尝试:
/* HERE IS WERE I NEED HELP */
item.Click += new EventHandler(toolStripClick);
实际处理程序:
void toolStripClick(object sender, EventArgs e)
{
ToolStripItem item = (ToolStripItem)sender;
MessageBox.Show(item.Text);
}
答案 1 :(得分:5)
您可以使用ToolStripMenuItem的Tag属性:
item.Tag = Announcements[i].LastChild.InnerText;
public void item_click(object sender, EventArgs e)
{
var menu = sender as ToolStripMenuItem;
if (menu!= null)
MessageBox.Show(menu.Tag);
}
或者您可以使用lambda,它将捕获变量:
string data = Announcements[i].LastChild.InnerText;
item.Click += (s, e) => { MessageBox.Show(data); };
答案 2 :(得分:2)
好吧,如果我理解你的问题,你的“需要帮助”部分应该成为:
item.Click += new EventHandler(item_click);
然后你只需要在你的班级中添加一个函数:
public void item_click(object sender, EventArgs e)
{
//do stuff here
}
答案 3 :(得分:2)
您要求点击事件的签名吗?如果你在visual studio工作,你应该能够输入
item.Click + =标签标签
它会为你生成一些东西
答案 4 :(得分:0)
我建议您查看订阅活动。如果您必须确保它是菜单项中的最后一项 Look at MSDN's help for the item
答案 5 :(得分:0)