Повторно использовать ToolStripMenu для ToolStrip или ContextMenuStrip? - PullRequest
2 голосов
/ 21 июня 2010

В моем приложении у меня есть ToolStripMenu (File, Edit, Notes), ToolStrip прямо над моей рабочей областью и контекстное меню для самой рабочей области.Теперь Notes ToolStripMenu, ToolStrip и ContextMenuStrip имеют одинаковое содержимое, которое выполняет одинаковые действия.Мне было интересно, есть ли элегантный способ просто спроектировать ToolStripMenu и иметь два других «зеркала» его функции и контента вместо того, чтобы переписывать все 3 раза?Я видел, что все 3 элемента управления используют ToolStripItems и ToolStripItemCollections, и поэтому я думаю, что это будет довольно легко сделать, но свойства в основном доступны только для чтения, и если я пытаюсь перебрать один элемент, чтобы добавить его к другому,удален из первоначального владельца, и для ToolStripItems нет метода Clone.

Спасибо.

1 Ответ

1 голос
/ 21 июня 2010

Создайте метод, который повторно использует ваши предметы, действия и т. Д. *

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...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...