C# 如何将ContextMenuStrip添加到ToolStripButton?
我有一个toolstrip,其中包括一个ToolStripComboBox和一个ToolStripButton。我想向这两个工具添加ContextMenuStrip,但我无法直接访问toolstrip或其其他内容,因此无法设置toolstrip的上下文菜单 为ToolStripComboBox设置ContextMenuStrip很容易:C# 如何将ContextMenuStrip添加到ToolStripButton?,c#,winforms,contextmenustrip,toolstripbutton,C#,Winforms,Contextmenustrip,Toolstripbutton,我有一个toolstrip,其中包括一个ToolStripComboBox和一个ToolStripButton。我想向这两个工具添加ContextMenuStrip,但我无法直接访问toolstrip或其其他内容,因此无法设置toolstrip的上下文菜单 为ToolStripComboBox设置ContextMenuStrip很容易: myToolStripComboBox.ComboBox.ContextMenuStrip = myContextMenu; 但是ToolStripButto
myToolStripComboBox.ComboBox.ContextMenuStrip = myContextMenu;
但是ToolStripButton没有明显的等价物。如何将ContextMenuStrip添加到ToolStripButton?这是因为ToolStripComboBox包含“System.Windows.Forms.ComboBox”控件,但“ToolStripButton”不包含“System.Windows.Forms.control”。其特殊的toolstrip项,其按钮由toolstip维护
您应该在toolstip上使用ContextMenu,或者您可以将下拉菜单添加到toolstripbutton项。您需要将上下文菜单设置为ToolStrip,然后处理上下文菜单的弹出或相关事件,并点击测试鼠标在哪个按钮上,以确定是否应显示ToolStrip的上下文菜单以及应该显示的内容包含。好问题。您可以访问父级
toolstrip
(myToolStripButton.parent
或类似内容),并将上下文菜单附加到那里。Jeff Yates的建议应该有效
但是,另一种选择是创建您自己的派生类(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));
}
}
}
小事情:我想大多数人会发现使用
contextMenu.Show(Cursor.Position)更合适
而不是父.PointToScreen(e.Location)
business,后者通常只为第一个ToolStripItem正确定位菜单