Стандартные панели меню Windows в Windows Forms - PullRequest
34 голосов
/ 06 мая 2010

Я заметил, что добавление MenuStrip (из панели инструментов) к моему дизайну формы не приводит к появлению строки меню, подобной той, которую можно увидеть во многих родных приложениях Windows. Вместо этого я получаю строку меню, как у Visual Studio. Похоже, что ни одна из настроек стиля для MenuStrip не имитирует гораздо более распространенную строку меню.

Есть ли способ добавить строку меню в мое приложение Windows Forms, которое выглядит так же, как в блокноте, диспетчере задач и других приложениях? (Желательно с дизайнером, но я бы тоже не против добавить его программно.)

Снимок экрана для иллюстрации:

Ответы [ 4 ]

54 голосов
/ 06 мая 2010

Это просто.

Перейдите на панель инструментов, щелкните правой кнопкой мыши в любом месте внутри и выберите «Выбрать элементы». Когда диалоговое окно загрузится и появится, прокрутите вниз, пока не увидите MainMenu. Добавьте это к панели инструментов, и вы получите собственную строку меню!

Удачного кодирования!

20 голосов
/ 06 мая 2010

Вы можете сделать это, установив свойство Menu формы, например:

private void Form1_Load(object sender, EventArgs e)
{
    this.Menu = new MainMenu();
        MenuItem item = new MenuItem("File");
        this.Menu.MenuItems.Add(item);
            item.MenuItems.Add("Save", new EventHandler(Save_Click));
            item.MenuItems.Add("Open", new EventHandler(Open_Click)); 
        item = new MenuItem("Edit");
        this.Menu.MenuItems.Add(item);
            item.MenuItems.Add("Copy", new EventHandler(Copy_Click));
            item.MenuItems.Add("Paste", new EventHandler(Paste_Click)); 
        // etc ...
}

private void Save_Click(object sender, EventArgs e)
{
    // save
}

Эти меню будут выглядеть как "нормальные" системные меню.

Я не смог найти поддержки для этого дизайнера. В свою защиту я не очень старался.

8 голосов
/ 04 декабря 2012

Вместо использования компонента MainMenu вы можете создать свой собственный рендер для компонента MenuStrip. Преимущество здесь в том, что вы можете добавлять изображения к MenuStripItem объектам. Вот пастбина для пользовательского рендерера:

NativeRenderer

Существуют разные темы, которые можно применять в конструкторе средства визуализации. Попробуйте их все, чтобы увидеть родные темы. Чтобы использовать это средство визуализации, просто установите для экземпляра свойство MenuStrip Renderer:

menuStrip.Renderer = new NativeRenderer([theme]);
4 голосов
/ 06 мая 2010

Я обычно устанавливаю RenderMode в MenuStrip на System, что дает минималистичное одноцветное меню (без градиентов или чего-либо подобного декадентскому).

Если этого недостаточно, то вам, вероятно, придется прыгнуть через несколько низкоуровневых пялец, чтобы получить то, что вы хотите.

...