Стандартный ProgressBar
в Windows Forms довольно ограничен в плане внешнего вида. По умолчанию его цвет зависит от системной темы, и изменить его напрямую через свойства невозможно. Однако есть несколько способов, как изменить цвет ProgressBar в C#, если хочется больше гибкости в интерфейсе.
Стандартный способ через стиль (ограниченно)
Для начала создадим обычный ProgressBar
:
ProgressBar progressBar = new ProgressBar();
progressBar.Minimum = 0;
progressBar.Maximum = 100;
progressBar.Value = 50;
progressBar.Style = ProgressBarStyle.Continuous;
Однако изменить цвет ForeColor
или BackColor
напрямую не даст результата — ProgressBar
проигнорирует их. Это поведение встроено в стандартный контрол Windows Forms.
Способ 1: через WinAPI (надежный)
using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace nookery_ru { public partial class Form1 : Form { public Form1() { InitializeComponent(); } [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam); private void Form1_Load(object sender, EventArgs e) { SendMessage(this.progressBar1.Handle, 0x410, 1, 0);//green SendMessage(this.progressBar2.Handle, 0x410, 3, 0);//yellow SendMessage(this.progressBar3.Handle, 0x410, 2, 0);//red } } }
Способ 2: создать собственный контрол
Для полной кастомизации можно унаследовать UserControl
и рисовать ProgressBar
вручную с нужным цветом. Это больше кода, но дает полный контроль.
Вывод
- Стандартный
ProgressBar
не поддерживает смену цвета через свойства. - Можно использовать WinAPI или создавать пользовательский контрол.
ProgressBarStyle.Continuous
необходим для однородной заливки.