Как программно подключить события ToolStripButton в C#?
Я программно добавляю элементы ToolStripButton в контекстное меню.
Эта часть проста.
this.tsmiDelete.DropDownItems.Add("The text on the item.");
Тем не менее, мне также нужно связать события так, чтобы, когда пользователь щелкает элемент, что-то действительно происходило!
Как мне это сделать? Метод, который обрабатывает щелчок, также должен получить некоторый идентификатор или объект, который относится к конкретному ToolStripButton, по которому щелкнул пользователь.
2 ответа
Не могли бы вы просто подписаться на событие Click? Что-то вроде этого:
ToolStripButton btn = new ToolStripButton("The text on the item.");
this.tsmiDelete.DropDownItems.Add(btn);
btn.Click += new EventHandler(OnBtnClicked);
И OnBtnClicked будет объявлен так:
private void OnBtnClicked(object sender, EventArgs e)
{
ToolStripButton btn = sender as ToolStripButton;
// handle the button click
}
Отправителем должен быть ToolStripButton, чтобы вы могли разыграть его и делать с ним все, что вам нужно.
Спасибо за вашу помощь с этим Энди. Моя единственная проблема сейчас заключается в том, что AutoSize не работает с инструментальными кнопками, которые я добавляю! Они слишком узкие.
Это довольно странно, потому что это работало раньше.
Обновление: определенно что-то не так с AutoSize для программно созданных ToolStripButtons. Однако я нашел решение:
- Создайте ToolStripButton.
- Создайте элемент управления меткой и установите свойства шрифта в соответствии с вашей кнопкой.
- Установите текст метки в соответствии с вашей кнопкой.
- Установите метку на AutoSize.
- Прочитайте ширину метки и используйте ее, чтобы установить ширину ToolStripButton.
Это хакерство, но это работает.