Изменить цвет выделения кнопки WinForms

Я нашел эту страницу, на которой описано, как изменить рендеринг для MenuStrip и его элементы.

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

Есть ли способ изменить цвет выделения с синего на желтый? Я пробовал использовать события MouseHover и MouseLeave, но по какой-то причине они очень медленные и меняют цвет кнопки на сплошной, что выглядит плохо, но оставляет границу на краю кнопки, которая не меняется. .

В дизайнере:

this.ButtonName.MouseHover += new System.EventHandler(button_mousehover);

А затем в Кодексе:

private void button_mousehover(object sender, EventArgs e)
{
    Button btn = sender as Button;
    btn.BackColor = Color.Yellow;
}

Есть ли что-нибудь более простое, как в ссылке, которую я разместил выше, чтобы изменить цвет выделения с синего на что-то другое?

Вот код для изменения отображения полосы меню:

private void myForm Load(object sender, EventArgs e)
{
    myMenuStrip.Renderer = new MenuRenderer();
{

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

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

Таким образом, он изменит фон наведенного элемента меню на оранжево-желтый градиент, изменит его на желто-оранжевый градиент при нажатии, и любой элемент в меню будет иметь золотую подсветку при наведении курсора.

Что я пытаюсь сделать, так это сделать последнюю часть (изменить выделение на золотой / желтый) для кнопок в моей форме.


person electroball09    schedule 07.01.2015    source источник
comment
Можете ли вы опубликовать свой код для изменения рендеринга элемента MenuStrip?   -  person Tomer    schedule 07.01.2015
comment
Конечно, подождите, я отредактирую это в комментарии.   -  person electroball09    schedule 07.01.2015
comment
подождите, какие цвета вы не видите, но ожидаете увидеть?   -  person Tomer    schedule 07.01.2015
comment
Я вижу цвет выделения, как вы описали. Когда я наводю курсор на MenuItems, я вижу их золото.   -  person Tomer    schedule 07.01.2015
comment
Да, подсветка полосы меню работает нормально. Я хочу иметь такую ​​же степень контроля над кнопкой (градиенты и т. Д.)   -  person electroball09    schedule 07.01.2015
comment
Вы пробовали недвижимость FlatAppearance?   -  person Baz Guvenkaya    schedule 20.09.2016


Ответы (2)


В свойствах кнопки:

в разделе FlatStyle выберите Flat.

Затем разверните FlatAppearance и в разделе MouseOverBackColor выберите нужный цвет выделения. Кроме того, вы также можете ввести желаемый RGB color под MouseOverBackColor.

person Chuque    schedule 30.01.2018
comment
Быстро и просто. Один из тех недооцененных и легко упускаемых из виду ответов на SO. - person oliver; 10.12.2018

Вы можете взглянуть на Средство визуализации кнопок.

Почему вы хотите переопределить средство визуализации, если вы можете просто подписаться на событие MouseHover следующим образом:

this.someButtonName.MouseHover += (s,e) => 
{
   this.someButtonName.BackColor = Color.Yellow;
};

Я рекомендую вам также использовать отпускание мыши, чтобы вернуть кнопке первоначальный цвет, когда ваша мышь больше не находится на ней.

person phadaphunk    schedule 07.01.2015
comment
Да, я сделал это, но это было A) Медленно по какой-то причине (для изменения BackColor потребовалось около полсекунды) и B) кнопка заполняет сплошным цветом, за исключением границы, что выглядит не очень хорошо. - person electroball09; 07.01.2015
comment
Я согласен, что это не дает лучших результатов. Вы пытались изменить другие свойства, такие как цвета границы? - person phadaphunk; 07.01.2015
comment
Хорошо, интересно, я просмотрел свойства и обнаружил, что в FlatAppearance есть набор свойств, одним из которых является MouseOverBackColor, который довольно быстро меняет фон (хотя и остается сплошным цветом), но работает только в том случае, если вы измените FlatStyle на Плоский или всплывающий. - person electroball09; 07.01.2015
comment
На самом деле, после некоторой настройки это выглядит довольно неплохо. Если никто не знает, как изменить цвет выделения, я, вероятно, воспользуюсь этим. - person electroball09; 07.01.2015
comment
Большой. Я уверен, что в Интернете есть множество примеров, когда другие успешно переопределяли выделение кнопки. - person phadaphunk; 07.01.2015