Как программно подключить события 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. Однако я нашел решение:

  1. Создайте ToolStripButton.
  2. Создайте элемент управления меткой и установите свойства шрифта в соответствии с вашей кнопкой.
  3. Установите текст метки в соответствии с вашей кнопкой.
  4. Установите метку на AutoSize.
  5. Прочитайте ширину метки и используйте ее, чтобы установить ширину ToolStripButton.

Это хакерство, но это работает.

Другие вопросы по тегам