Стандартный 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необходим для однородной заливки.
