Как программно подключить события ToolStripButton в C #? - PullRequest
2 голосов
/ 17 сентября 2008

Я программно добавляю элементы ToolStripButton в контекстное меню.

Эта часть проста.

this.tsmiDelete.DropDownItems.Add("The text on the item.");

Однако мне также нужно связать события так, чтобы, когда пользователь щелкает элемент, что-то действительно происходило!

Как мне это сделать? Метод, который обрабатывает щелчок, также должен получить некоторый идентификатор или объект, который относится к конкретному ToolStripButton, по которому щелкнул пользователь.

Ответы [ 2 ]

3 голосов
/ 17 сентября 2008

Не могли бы вы просто подписаться на событие 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, чтобы вы могли разыграть его и делать с ним все, что вам нужно.

0 голосов
/ 17 сентября 2008

Спасибо за вашу помощь с этим Энди. Моя единственная проблема сейчас заключается в том, что AutoSize не работает с добавляемыми мной кнопками ToolStripButtons! Они слишком узкие.

Это довольно странно, потому что это работало раньше.


Обновление: определенно что-то не так с AutoSize для программно созданных ToolStripButtons. Однако я нашел решение:

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

Хак, но это работает.

...