Как я могу иметь несколько форм совместно использовать общее меню в приложении Winforms? - PullRequest
3 голосов
/ 05 января 2010

У меня есть существующее .NET Winforms приложение, созданное с несколькими сложными формами, и

1) все формы живут для жизни приложения, а

2) Одновременно отображается только одна форма (пользователь переключается между формами)

Мне нужно, чтобы эти формы имели общее меню, которое будет обрабатываться одним контроллером бизнес-логики. (Видимая форма также постоянно обновляется контроллером)

Есть ли способ, чтобы одно и то же меню отображалось в верхней части каждой формы и обрабатывалось ли меню их общим контроллером без необходимости превращать его в приложение MDI?

Большое спасибо!

Ответы [ 3 ]

4 голосов
/ 05 января 2010

Создать базовую форму с меню. Затем отдельные формы могут наследовать эту базовую форму, автоматически получая одно и то же меню. Чтобы реорганизовать существующие формы, отредактируйте файл form.cs и измените

 public partial class Form1 : Form 

до

 public partial class Form1 : MyBaseForm
1 голос
/ 05 января 2010

Создайте меню в пользовательском элементе управления (пользовательский элемент управления), а затем добавьте этот элемент управления в каждую из ваших форм.

0 голосов
/ 20 декабря 2018

Старый вопрос, я знаю, но мой ответ все еще может помочь людям.

Этот класс будет хорошим началом для управления этим:

Отказ от ответственности: не проверено, но идея должна работать.

static class FormService{
    /*
     * Members
     */
    private static Dictionary<string, Form> _forms = new Dictionary<string, Form>();
    private static Dictionary<string, Type> _types = new Dictionary<string, Type>();       
    private static Form opened_ = null;

    /*
     * Properties
     */

    public static Form Opened

    /*
     * Methods
     */
    public static void register(string className, Type type){
        if (_types.ContainsKey(className))throw new Exception("Form already registered");
        _forms.Add(className, Activator.CreateInstance(type));
        _types.Add(className, type);

    }

    // use with Convert.ChangeType
    public static Type getFormType(string className){
        return _types[className];
    }

    public static void open(string className){
        if (opened_ != null){
            opened_.Hide();
        }
        opened_ = _forms[className];
        opened_.ShowDialog(); // show dialog will block main menu actions
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...