progressbar цвет

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.