在我的应用程序中,我有一个ToolStripMenu(文件,编辑,注释),工作区正上方的ToolStrip和工作区本身的上下文菜单。现在,Notes ToolStripMenu,ToolStrip和ContextMenuStrip都具有执行相同操作的相同内容。我想知道,是否有一种优雅的方法来设计ToolStripMenu并具有其他两个“镜像”功能和内容,而不是将所有内容重写3次?我看到所有3个控件都使用ToolStripItems和ToolStripItemCollections,因此我认为这很容易做到,但是属性大多是只读的,如果我尝试遍历一个人的项以将它们添加到另一个中,则它们是从最初的所有者移除,并且ToolStripItems没有Clone方法。
谢谢。
最佳答案
创建一种重新使用您的项目,操作等的方法。
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...
}