Как изменить цвет меню при наведении - PullRequest
23 голосов
/ 13 февраля 2012

Как изменить цвет при наведении курсора мыши в меню приложения Windows?

Любой метод в C #?

ИЛИ

В любом случае, используя Windows API (DllImport)?

См. Изображение:

enter image description here

Ответы [ 4 ]

56 голосов
/ 13 февраля 2012

Вы используете класс MenuStrip. Вы можете переопределить его рендер. Вот пример, выберите свои собственные цвета, пожалуйста.

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        menuStrip1.Renderer = new MyRenderer();
    }

    private class MyRenderer : ToolStripProfessionalRenderer {
        public MyRenderer() : base(new MyColors()) {}
    }

    private class MyColors : ProfessionalColorTable {
        public override Color MenuItemSelected {
            get { return Color.Yellow; }
        }
        public override Color MenuItemSelectedGradientBegin {
            get { return Color.Orange; }
        }
        public override Color MenuItemSelectedGradientEnd {
            get { return Color.Yellow; }
        }
    }
}

Другие свойства ProfessionalColorTable управляют другими цветными элементами.

8 голосов
/ 05 марта 2015

Для изменения цвета рамки при наведении курсора (на элементах) используйте:

public override Color MenuItemBorder  
{
    get { return Color.Green; }
}
4 голосов
/ 19 ноября 2018

У меня был похожий вопрос, и я просмотрел много статей, много форумов, но не нашел идеального ответа на свои вопросы. У меня была проблема не только с наведением курсора на элементы выпадающего меню, но и с фоном и компоновкой, а также с тем, как можно добавить подэлементы программным способом. Затем я обнаружил, как можно легко настроить MenuStrip на форумах Stackoverflow, однако у меня все еще осталась проблема с выпадающими списками. Затем я выясняю, что ContextMenuStip обладает свойствами для достижения целей. Легко добавить любой MenuStrip ContextMenuStrip как меню DropDown. О, да: прелесть в том, что вам не нужно использовать какие-либо специальные компоненты.

Итак, шаги следующие:

  1. Вам нужно иметь таблицу цветов.
  2. Вы должны использовать его в MenuStrip.
  3. ToolStripMenuItems в вашем MenuStrip должен иметь ContextMenuStrip как DropDown.
  4. С помощью функции ToolStripMenuItems.Items [?]. DropDownItems вы можете легко управлять подэлементами, которые отображаются в виде раскрывающихся элементов.

1.- Таблицы цветов:

    public class submenuColorTable : ProfessionalColorTable
    {
        public override Color MenuItemSelected
        {
            get { return ColorTranslator.FromHtml("#302E2D"); }
        }

        public override Color MenuItemBorder
        {
            get { return Color.Silver; }
        }

        public override Color ToolStripDropDownBackground
        {
            get { return ColorTranslator.FromHtml("#21201F"); }
        }

        public override Color ToolStripContentPanelGradientBegin
        {
            get { return ColorTranslator.FromHtml("#21201F"); }
        }
    }

    public class LeftMenuColorTable : ProfessionalColorTable
    {
        public override Color MenuItemBorder
        {
            get { return ColorTranslator.FromHtml("#BAB9B9"); }
        }

        public override Color MenuBorder  //added for changing the menu border
        {
            get { return Color.Silver; }
        }

        public override Color MenuItemPressedGradientBegin
        {
            get { return ColorTranslator.FromHtml("#4C4A48"); }
        }
        public override Color MenuItemPressedGradientEnd
        {
            get { return ColorTranslator.FromHtml("#5F5D5B"); }
        }            

        public override Color ToolStripBorder
        {
            get { return ColorTranslator.FromHtml("#4C4A48"); }
        }

        public override Color MenuItemSelectedGradientBegin
        {
            get { return ColorTranslator.FromHtml("#4C4A48"); }
        }

        public override Color MenuItemSelectedGradientEnd
        {
            get { return ColorTranslator.FromHtml("#5F5D5B"); }
        }

        public override Color ToolStripDropDownBackground
        {
            get { return ColorTranslator.FromHtml("#404040"); }
        }

        public override Color ToolStripGradientBegin
        {
            get { return ColorTranslator.FromHtml("#404040"); }
        }

        public override Color ToolStripGradientEnd
        {
            get { return ColorTranslator.FromHtml("#404040"); }
        }

        public override Color ToolStripGradientMiddle
        {
            get { return ColorTranslator.FromHtml("#404040"); }
        }
    }

2.- Использование его в MenuStrip:

menuStrip.Renderer = new ToolStripProfessionalRenderer(new LeftMenuColorTable());

3.- Добавление ContextMenuStrip к элементу меню программно

        ContextMenuStrip CMS = new ContextMenuStrip()
        {
            Renderer = new ToolStripProfessionalRenderer(new submenuColorTable()),
            ShowImageMargin = false
        };

        ToolStripMenuItem TSMI = new ToolStripMenuItem("Button name")
        {
            BackColor = sampleMenuItem.BackColor,
            ForeColor = sampleMenuItem.ForeColor,
            Font = sampleMenuItem.Font,
            Margin = sampleMenuItem.Margin,
            Padding = sampleMenuItem.Padding,
            Size = sampleMenuItem.Size,
            TextAlign = sampleMenuItem.TextAlign,
            DropDown = CMS 
        };

        menuStrip.Items.Add(TSMI);

4.- Управление подэлементами

Здесь вы можете управлять (например, добавлять) элементами выпадающего меню. Цвет, размер и другие свойства просто используются для тестирования. Вы можете использовать постоянные или разные значения. («i» - это индекс кнопки меню, который вы хотите добавить в записи)

        ToolStripMenuItem newItem = new ToolStripMenuItem("Button Name", null, ToolStripMenuItem_Click)
        {
            Text = "Button Name",
            BackColor = toolStripMenuItem01.BackColor,
            ForeColor = toolStripMenuItem01.ForeColor,
            Font = toolStripMenuItem01.Font,
            Margin = toolStripMenuItem01.Margin,
            Padding = toolStripMenuItem01.Padding,
            Size = toolStripMenuItem01.Size
        };

        ((ToolStripMenuItem)menuStrip.Items[i]).DropDownItems.Add(newItem);

Результат в моем случае следующий:

Submenu with programmatically added elements.

Это может быть полезно для других. Спасибо за прочтение! Удачного кодирования! :)

2 голосов
/ 17 июля 2017

Вы также можете сделать его прозрачным (невидимым):

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