Question

J'ai une bande d'outils contenant, entre autres, un ToolStripComboBox et un ToolStripButton. Je souhaite ajouter un ContextMenuStrip aux deux, mais je n'ai pas d'accès direct à la barre d'outils ni à ses autres contenus. Je ne peux donc pas définir le menu contextuel de la barre d'outils.

Il est facile de définir ContextMenuStrip pour ToolStripComboBox:

myToolStripComboBox.ComboBox.ContextMenuStrip = myContextMenu;

mais il n'y a pas d'équivalent évident pour le ToolStripButton. Comment ajouter un ContextMenuStrip à un ToolStripButton?

Était-ce utile?

La solution

Ce que Jeff Yates a suggéré devrait fonctionner.

Cependant, une autre alternative consiste à créer vos propres classes dérivées (MyToolSTripButton, MyToolStripTextBox ... etc.) attribue à ces éléments une propriété ContextMenuStrip que vous pouvez définir au moment de la conception et que vos classes dérivées détectent le clic droit vers le bas, ou autre chose. d'autres événements déclencheront l'affichage du menu contextuel.

Cela permet de décharger les connaissances nécessaires uniquement vers les éléments intéressés.

Vous trouverez ci-dessous un exemple utilisant ToolStripTextBox comme élément.

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));
        }
    }
}

Autres conseils

Vous devrez définir le menu contextuel sur ToolStrip, puis gérer le menu contextuel du menu contextuel ou un événement associé, puis cliquer sur le bouton sur lequel la souris se trouve pour déterminer si vous devez afficher le menu contextuel de ToolStrip et ce qu'il doit faire. contenir.

C'est parce que ToolStripComboBox contient "System.Windows.Forms.ComboBox". contrôle, mais " ToolStripButton " ne contient pas "System.Windows.Forms.Control". Son élément spécial toolstrip, dont le bouton est maintenu par toolstip.

Vous devez utiliser ContextMenu sur la barre d’outils ou ajouter une liste déroulante à l’élément toolstripbutton.

Bonne question. Vous pourrez peut-être accéder au toolstrip du parent ( myToolStripButton.Parent ou quelque chose de similaire) et y attacher le menu contextuel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top