Почему не изменяется свойство backcolor toolstriplabel во время разработки или выполнения? - PullRequest
4 голосов
/ 07 ноября 2011

Мне нужно, чтобы метка панели инструментов и цвет ее спины менялись во время выполнения, но независимо от того, что я делаю. Он просто не изменит свой задний цвет, даже если они дают возможность изменить его задний цвет. Почему и как вы заставляете его свойство backcolor изменяться во время выполнения или разработки?

Заранее спасибо,

1 Ответ

8 голосов
/ 07 ноября 2011

Это зависит от настройки RenderMode в ToolStrip. Только когда вы измените его на 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));
            }
        }
    }
}
...