2008-11-12 63 views
2

我有一个tooltrip,其中包含ToolStripComboBox和ToolStripButton。我想为它们添加一个ContextMenuStrip,但我没有直接访问工具条或其他内容,所以我无法设置工具条的上下文菜单。如何将ContextMenuStrip添加到ToolStripButton?

设置的ContextMenuStrip的ToolStripComboBox控件很简单:

myToolStripComboBox.ComboBox.ContextMenuStrip = myContextMenu; 

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

回答

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

小东西:我想大多数人会觉得比较认同用`contextMenu.Show(Cursor.Position);`而不是`Parent.PointToScreen(e.Location)`业务,通常只为第一个ToolStripItem正确定位菜单 – Toji 2010-10-26 22:06:40

0

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

您应该在toolstip上使用ContextMenu,或者您可以将下拉菜单添加到toolstripbutton项目中。

2

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

0

好问题。您可能可以访问父级toolstripmyToolStripButton.Parent或其他类似内容)并在其中附加上下文菜单。