如何将ContextMenuStrip添加到ToolStripButton?

时间:2008-11-12 09:27:30

标签: c# winforms contextmenustrip toolstripbutton

我有一个工具条,其中包含ToolStripComboBox和ToolStripButton。我想为它们添加一个ContextMenuStrip,但是我没有直接访问工具条或其他内容,因此我无法设置工具栏的上下文菜单。

为ToolStripComboBox设置ContextMenuStrip非常简单:

myToolStripComboBox.ComboBox.ContextMenuStrip = myContextMenu;

但ToolStripButton没有明显的等价物。如何将ContextMenuStrip添加到ToolStripButton?

4 个答案:

答案 0 :(得分:4)

杰夫耶茨所建议的应该是有效的。

然而,另一种方法是创建自己的派生类(MyToolSTripButton,MyToolStripTextBox等)为这些项提供一个可以在设计时设置的ContextMenuStrip属性,并让派生类检测到鼠标右键,或者其他其他事件将触发上下文菜单的显示。

这可以卸载只有那些感兴趣的项目所需的知识。

下面是一个使用ToolStripTextBox作为项目的示例。

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

答案 1 :(得分:2)

您需要将上下文菜单设置为ToolStrip,然后处理上下文菜单的弹出窗口或相关事件,并点击测试鼠标所在的按钮,以确定是否应显示ToolStrip的上下文菜单以及它应该是什么包含。

答案 2 :(得分:0)

这是因为ToolStripComboBox包含“System.Windows.Forms.ComboBox”控件,但“ToolStripButton”不包含“System.Windows.Forms.Control”。它的特殊工具条项目,其按钮由工具提示维护。

您应该在工具提示中使用ContextMenu,或者您可以向工具条按钮项添加下拉列表。

答案 3 :(得分:0)

好问题。您可以访问父toolstripmyToolStripButton.Parent或类似的东西),并在其中附加上下文菜单。