如何在选中时更改System.Windows.Forms.ToolStripButton的高亮/背景颜色?

23

我有一个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);
3个回答

49

你可以提供自己的工具条渲染器来绘制按钮的背景,使它们以你想要的方式呈现。以下示例代码将选中的按钮设置为非常显眼的黑色背景:

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

如果您不喜欢从此示例绘制的矩形的大小,您可能希望使用按钮的ContentRectangle属性,如果您不希望覆盖背景边框。 - Froopy

0

这里是VB.net代码

Public Class Form1

   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
      toolStrip1.Renderer = New MyRenderer()
   End Sub

   Public Class MyRenderer
      Inherits ToolStripProfessionalRenderer

      Protected Overrides Sub OnRenderButtonBackground(ByVal e As ToolStripItemRenderEventArgs)
          Dim btn As ToolStripButton = e.Item
          If (Not IsDBNull(btn) And btn.CheckOnClick And btn.Checked) Then
              Dim bounds As Rectangle = New Rectangle(Point.Empty, e.Item.Size)
              e.Graphics.FillRectangle(Brushes.Black, bounds)
          End If
      End Sub
End Class

0

为每个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;

        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接