Как изменить подсветку System.Windows.Forms.ToolStripButton / цвет фона при проверке? - PullRequest
20 голосов
/ 20 января 2010

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

Как мне изменить цвет подсветки, когда свойство Checkedустановлен в 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);

Ответы [ 2 ]

44 голосов
/ 20 января 2010

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

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 голосов
/ 08 января 2019

при клике на событие для каждого toolStripButton

private void toolStripButton4_Click(object sender, EventArgs e)
        {
            toolStrip1.Items[0].BackColor = SystemColors.ActiveCaption;
            toolStrip1.Items[1].BackColor = SystemColors.Control;
            toolStrip1.Items[2].BackColor = SystemColors.Control;
            toolStrip1.Items[3].BackColor = SystemColors.Control;

        }
...