Как настроить toolstrip кнопка выделения цвета на мыши

Я использую 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);
        }
    }
}

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

те, которые контролируют действие "нависать" с 'избранный' в своем имени, например 'ButtonSelectedGradientBegin'.

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


и

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

  • события мыши: 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;
    }