¿Cómo agrego un ContextMenuStrip a un ToolStripButton?
-
08-07-2019 - |
Pregunta
Tengo una tira de herramientas que contiene, entre otras cosas, un ToolStripComboBox y un ToolStripButton. Quiero agregar un ContextMenuStrip a ambos, pero no tengo acceso directo a la tira de herramientas u otros contenidos, por lo que no puedo configurar el menú contextual de la tira de herramientas.
Configurar ContextMenuStrip para ToolStripComboBox es fácil:
myToolStripComboBox.ComboBox.ContextMenuStrip = myContextMenu;
pero no hay un equivalente obvio para ToolStripButton. ¿Cómo agrego un ContextMenuStrip a un ToolStripButton?
Solución
Lo que Jeff Yates ha sugerido debería funcionar.
Sin embargo, otra alternativa es crear sus propias clases derivadas (MyToolSTripButton, MyToolStripTextBox ... etc.) dar a estos elementos una propiedad ContextMenuStrip que puede establecer en el momento del diseño, y hacer que sus clases derivadas detecten el mouse derecho hacia abajo, o lo que sea otros eventos activarán la visualización del menú contextual.
Esto descarga todo el conocimiento necesario solo para aquellos elementos interesados.
A continuación se muestra uno de esos ejemplos usando ToolStripTextBox como elemento.
public class MyTextBox : ToolStripTextBox
{
ContextMenuStrip _contextMenuStrip;
public ContextMenuStrip ContextMenuStrip
{
get { return _contextMenuStrip; }
set { _contextMenuStrip = value; }
}
protected override void OnMouseDown(MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
if (_contextMenuStrip !=null)
_contextMenuStrip.Show(Parent.PointToScreen(e.Location));
}
}
}
Otros consejos
Deberá establecer el menú contextual en ToolStrip y luego manejar la ventana emergente del menú contextual o un evento relacionado y presionar probar qué botón se encuentra con el mouse para determinar si debe mostrar el menú contextual de ToolStrip y qué debería contener.
Es porque un ToolStripComboBox contiene " System.Windows.Forms.ComboBox " control, pero "ToolStripButton" no contiene " System.Windows.Forms.Control " ;. Su elemento especial de la tira de herramientas, cuyo botón es mantenido por toolstip.
Debe usar ContextMenu en toolstip o puede agregar un menú desplegable al elemento del botón de herramientas.
Buena pregunta. Es posible que pueda acceder a la tooltrip
principal ( myToolStripButton.Parent
o algo similar) y adjuntar el menú contextual allí.