2

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

为 ToolStripComboBox 设置 ContextMenuStrip 很简单:

myToolStripComboBox.ComboBox.ContextMenuStrip = myContextMenu;

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

4

4 回答 4

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));
        }
    }
}
于 2009-11-21T07:46:37.717 回答
2

您需要将上下文菜单设置为 ToolStrip,然后处理上下文菜单的 Popup 或相关事件并点击测试鼠标悬停在哪个按钮上以确定您是否应该显示 ToolStrip 的上下文菜单以及它应该包含的内容。

于 2008-11-24T18:19:35.887 回答
0

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

您应该在工具提示上使用 ContextMenu,或者您可以将下拉菜单添加到工具条按钮项。

于 2008-11-12T09:35:16.737 回答
0

好问题。您可能能够访问父级toolstripmyToolStripButton.Parent或类似的东西)并在那里附加上下文菜单。

于 2008-12-09T22:24:32.017 回答