Как настроить цвет подсветки кнопки на панели инструментов

Я использую ToolStrip в приложении Winform C#.
Когда я наведу курсор мыши на кнопку, она подсвечивается (прозрачный синий цвет), я хочу изменить этот цвет

Я пытался использовать пользовательский класс рендерера

 toolStrip1.Renderer = new MyRenderer();
 ....
 class MyRenderer : ToolStripProfessionalRenderer
 {
 }

Тем не менее, я не знаю, какой метод я должен изменить, чтобы изменить этот цвет.

3 ответа

Решение

На самом деле, нет встроенного способа (или, по крайней мере, я не знаю об этом).

class MyRenderer : ToolStripProfessionalRenderer
{
    protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e)
    {
        if (!e.Item.Selected)
        {
            base.OnRenderButtonBackground(e);
        }
        else
        {
            Rectangle rectangle = new Rectangle(0, 0, e.Item.Size.Width - 1, e.Item.Size.Height - 1);
            e.Graphics.FillRectangle(Brushes.Green, rectangle);
            e.Graphics.DrawRectangle(Pens.Olive, rectangle);
        }
    }
}

Быстро и грязно

Используйте метки вместо кнопок. Вы можете установить изображение, фоновое изображение и текст метки панели инструментов. Затем настройте события клика.

  • СобытиеMouseEnter для элемента toolstrip:

    private void tsi_MouseEnter(object sender, EventArgs e)
    {
        // Cast to allow reuse of method.
        ToolStripItem tsi = (ToolStripItem)sender;
    
        // Create semi-transparent picture.
        Bitmap bm = new Bitmap(tsi.Width, tsi.Height);
        for (int y = 0; y < tsi.Height; y++)
        {
            for (int x = 0; x < tsi.Width; x++)
                bm.SetPixel(x, y, Color.FromArgb(150, Color.White));
        }
    
        // Set background.
        tsi.BackgroundImage = bm;
    }
    
  • СобытиеMouseLeave:

    private void tsi_MouseLeave(object sender, EventArgs e)
    {
        (sender as ToolStripItem).BackgroundImage = null;
    }
    

Вы можете сделать это, также сделав пользовательскую реализацию ProfessionalColorTable и передав ее конструктору ToolStripProfessionalRenderer. Затем вы можете переопределить некоторые из множества свойств в таблице цветов.

Те, которые управляют эффектом "зависания", это те, которые имеют "Selected" в названии, например "ButtonSelectedGradientBegin".

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

Другие вопросы по тегам