在我的应用程序中,我有一个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...
}

10-08 08:01