Как нарисовать мой собственный индикатор на winforms? - PullRequest
1 голос
/ 29 сентября 2010

Йо-йо эксперты!У меня есть несколько индикаторов на моей форме Windows (НЕ WPF), и я хотел бы использовать разные цвета для каждого из них.Как я могу это сделать?Я погуглил и обнаружил, что должен создать свой собственный контроль.Но я понятия не имею, как это сделать.Любая идея?Например, прогрессБар1 зеленый, прогрессбар2 красный.

Редактировать: ох, я бы хотел решить эту проблему, не удаляя Application.EnableVisualStyles ();линии, потому что это будет ввернуть мою форму, глядя вверх: /

1 Ответ

5 голосов
/ 29 сентября 2010

Да, создайте свой собственный.Черновой набросок, чтобы получить 80%, при необходимости украсить:

using System;
using System.Drawing;
using System.Windows.Forms;

class MyProgressBar : Control {
    public MyProgressBar() {
        this.SetStyle(ControlStyles.ResizeRedraw, true);
        this.SetStyle(ControlStyles.Selectable, false);
        Maximum = 100;
        this.ForeColor = Color.Red;
        this.BackColor = Color.White;
    }
    public decimal Minimum { get; set; }  // fix: call Invalidate in setter
    public decimal Maximum { get; set; }  // fix as above

    private decimal mValue;
    public decimal Value {
        get { return mValue; }
        set { mValue = value; Invalidate(); }
    }

    protected override void OnPaint(PaintEventArgs e) {
        var rc = new RectangleF(0, 0, (float)(this.Width * (Value - Minimum) / Maximum), this.Height);
        using (var br = new SolidBrush(this.ForeColor)) {
            e.Graphics.FillRectangle(br, rc);
        }
        base.OnPaint(e);
    }
}
...