С# динамически добавляет обработчик событий
Привет, у меня есть простой вопрос. вот мой код:
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 содержит информацию для каждого аннуляции. Я хотел бы создать обработчик события щелчка, когда при щелчке элемента списка появляется окно с данными внутри него. Моя проблема в том, что я не хочу, как динамически создавать обработчики событий для этого: (
Ответы
Ответ 1
попробовать:
/* 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);
}
Ответ 2
Вы можете использовать свойство Tag для ToolStripMenuItem:
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);
}
Или вы можете использовать лямбда, которая будет захватывать переменную:
string data = Announcements[i].LastChild.InnerText;
item.Click += (s, e) => { MessageBox.Show(data); };
Ответ 3
Хорошо, если я правильно понял ваш вопрос, раздел "нужна помощь" должен стать следующим:
item.Click += new EventHandler(item_click);
вам просто нужно добавить функцию в свой класс:
public void item_click(object sender, EventArgs e)
{
//do stuff here
}
Ответ 4
вы просите подпись для события click? если вы работаете в визуальной студии, вы должны ввести
item.Click + = вкладка вкладки
и он создаст что-то для вас
Ответ 5
Я бы порекомендовал вам посмотреть подписки на события. В случае, если вы должны убедиться, что это последний элемент в пункте меню.
Посмотрите на справку MSDN для элемента