【问题标题】:Reuse a ToolStripMenu for a ToolStrip or a ContextMenuStrip?为 ToolStrip 或 ContextMenuStrip 重用 ToolStripMenu?
【发布时间】:2011-03-06 09:39:40
【问题描述】:
在我的应用程序中,我有一个 ToolStripMenu(文件、编辑、注释)、一个位于工作区正上方的 ToolStrip 和一个用于工作区本身的上下文菜单。现在,Notes ToolStripMenu、ToolStrip 和 ContextMenuStrip 都具有执行相同操作的相同内容。我想知道,是否有一种优雅的方式来设计 ToolStripMenu 并拥有另外两个“镜像”它的功能和内容,而不是重写所有内容 3 次?我看到所有 3 个控件都使用 ToolStripItems 和 ToolStripItemCollections ,因此我认为这很容易做到,但属性大多是只读的,如果我尝试遍历一个项目以将它们添加到另一个项目,它们是从初始所有者中删除,并且没有用于 ToolStripItems 的 Clone 方法。
谢谢。
【问题讨论】:
标签:
c#
winforms
user-interface
menu
【解决方案1】:
创建一个方法来重复使用您的项目、操作等...
public MainForm()
{
//in your constructor, create all your common methods, actions, etc and save them to private vars
//Then in your form:
ToolStripMenu menu = new ToolStripMenu();
AttachCommonFunctionality(menu);
Items.Add(menu);
ContextMenuStrip rightClick = new ContextMenuStrip();
AttachCommonFunctionality(rightClick);
this.ContextMenu = rightClick;
//etc...
}
private void AttachCommonFuntionality(Control c)
{
c.Items.Add(_item1);
c.Items.Add(_item2);
//etc...
c.OnClick += _myCommonAction;
//etc...
}