2015-03-20 5 views
4

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

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

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

Однако, я не» t знать, какой метод я должен переопределить, чтобы изменить этот цвет.

ответ

6

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

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); 
     } 
    } 
} 
2

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

Те, которые управляют эффектом «наведения», это те, у которых есть «Выбранные» в их имени, такие как «ButtonSelectedGradientBegin».

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

1

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

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

  • 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; 
    }