2010-01-19 1 views
16

У меня есть ToolStripButton, который используется в качестве переключателя. Когда он установлен, синяя контур окружает кнопку, но цвет фона отсутствует. Для пользователя недостаточно ясно, что кнопка отмечена, поэтому я хотел бы изменить цвет фона, чтобы сделать состояние проверки более заметным.Как изменить System.Windows.Forms.ToolStripButton выделить/цвет фона при проверке?

Как мне изменить цвет подсветки, если для свойства Проверено установлено значение true?

Вот фрагмент кода:

this.hideInactiveVehiclesToolstripButton.CheckOnClick = true; 
     this.hideInactiveVehiclesToolstripButton.ForeColor = System.Drawing.Color.Blue; 
     this.hideInactiveVehiclesToolstripButton.AutoSize = false; 
     this.hideInactiveVehiclesToolstripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; 
     this.hideInactiveVehiclesToolstripButton.Image = global::ClientUI.Properties.Resources.toggleInactive; 
     this.hideInactiveVehiclesToolstripButton.ImageTransparentColor = System.Drawing.Color.Black; 
     this.hideInactiveVehiclesToolstripButton.Name = "hideInactiveVehiclesToolstripButton"; 
     this.hideInactiveVehiclesToolstripButton.Size = new System.Drawing.Size(48, 48); 
     this.hideInactiveVehiclesToolstripButton.Text = "Hide Inactive Vehicles"; 
     this.hideInactiveVehiclesToolstripButton.Click +=new System.EventHandler(this.hideInactiveVehiclesToolstripButton_Click); 

ответ

36

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

public partial class Form1 : Form { 
    public Form1() { 
     InitializeComponent(); 
     toolStrip1.Renderer = new MyRenderer(); 
    } 
    private class MyRenderer : ToolStripProfessionalRenderer { 
     protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) { 
      var btn = e.Item as ToolStripButton; 
      if (btn != null && btn.CheckOnClick && btn.Checked) { 
       Rectangle bounds = new Rectangle(Point.Empty, e.Item.Size); 
       e.Graphics.FillRectangle(Brushes.Black, bounds); 
      } 
      else base.OnRenderButtonBackground(e); 
     } 
    } 
} 
+0

очень понравилось! – mwalsher