c# events toolstripbutton toolstripitem

¿Cómo conecto programáticamente los eventos ToolStripButton en C#?



events toolstripitem (2)

Estoy agregando programáticamente elementos ToolStripButton a un menú contextual.

Esa parte es fácil.

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

Sin embargo, también necesito conectar los eventos para que cuando el usuario haga clic en el elemento, ¡realmente suceda algo!

¿Cómo hago esto? El método que maneja el clic también necesita recibir algún tipo de identificación u objeto que se relacione con el ToolStripButton particular en el que hizo clic el usuario.


¿No podría simplemente suscribirse al evento Click? Algo como esto:

ToolStripButton btn = new ToolStripButton("The text on the item."); this.tsmiDelete.DropDownItems.Add(btn); btn.Click += new EventHandler(OnBtnClicked);

Y OnBtnClicked se declararía así:

private void OnBtnClicked(object sender, EventArgs e) { ToolStripButton btn = sender as ToolStripButton; // handle the button click }

El remitente debe ser el ToolStripButton, para que pueda transmitirlo y hacer lo que tenga que hacer con él.


Gracias por tu ayuda con eso Andy. ¡Mi único problema ahora es que AutoSize no está funcionando en ToolStripButtons que estoy agregando! Todos son demasiado estrechos.

Es bastante extraño porque estaba funcionando antes.

Actualización: Definitivamente hay algo mal con AutoSize para ToolStripButtons creados por programa. Sin embargo, encontré una solución:

  1. Crea el ToolStripButton.
  2. Cree un control de etiqueta y establezca las propiedades de fuente para que coincida con su botón.
  3. Establezca el texto de la etiqueta para que coincida con su botón.
  4. Establezca la etiqueta en AutoSize.
  5. Lea el ancho de la etiqueta y úselo para establecer el ancho del ToolStripButton.

Es hacky, pero funciona.