我需要有一个工具条标签,并且它的背面颜色在运行时会发生变化,但无论我做什么。它只是不会改变它的背景颜色,即使它们可以选择改变它的背景颜色。为什么这样,以及如何在运行时或设计时将其backcolor属性更改?
提前致谢,
答案 0 :(得分:8)
这受ToolStrip的RenderMode设置的影响。只有当您将其更改为System时,BackColor属性才会生效。其他渲染器使用主题颜色。你可能不会非常喜欢System,但是你可以通过实现自己的渲染器让你吃蛋糕并吃掉它。使它看起来类似于:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
this.toolStrip1.Renderer = new MyRenderer();
}
private class MyRenderer : ToolStripProfessionalRenderer {
protected override void OnRenderLabelBackground(ToolStripItemRenderEventArgs e) {
using (var brush = new SolidBrush(e.Item.BackColor)) {
e.Graphics.FillRectangle(brush, new Rectangle(Point.Empty, e.Item.Size));
}
}
}
}
答案 1 :(得分:1)
我不喜欢改变渲染模式,所以我选择了这个:
private static void SetBackgroundColor(ToolStripLabel tsl, Color c)
{
if (tsl != null)
{
Bitmap bm = new Bitmap(1, 1);
using (Graphics g = Graphics.FromImage(bm)) { g.FillRectangle(new SolidBrush(c), 0, 0, 1, 1); }
tsl.BackgroundImageLayout = ImageLayout.Stretch;
Image oldImage = tsl.BackgroundImage;
tsl.BackgroundImage = (Image)bm.Clone();
if (oldImage != null) { oldImage.Dispose(); }
bm.Dispose();
}
}
使用 BackgroundImage 填充纯色位图。
您可能可以附加到 BackColorChanged 事件并调用此函数。