Мое требование - менять цвет индикатора выполнения на красный, когда я нажимаю кнопку. Я не хочу комментировать Application.EnableVisualStyles().Цвет ProgressBar не меняется C#
Поэтому я попытался использовать SendMessage. Мой код:
[DllImport("user32.dll")]
private static extern bool SendMessage(IntPtr hWnd, Int32 msg, Int32 wParam, Int32 lParam);
private const Int32 WM_USER = 0x0400;
private const Int32 CCM_FIRST = 0x2000;
private const Int32 PBM_SETBARCOLOR = WM_USER + 9;
private const Int32 PBM_SETBKCOLOR = CCM_FIRST + 1;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.Invoke((MethodInvoker)delegate
{
SendMessage(this.progressBar1.Handle, PBM_SETBARCOLOR, 0, ColorTranslator.ToWin32(Color.Red));
SendMessage(this.progressBar1.Handle, PBM_SETBKCOLOR, 0, ColorTranslator.ToWin32(Color.Red));
progressBar1.Style = ProgressBarStyle.Continuous;
progressBar1.Value = progressBar1.Maximum;
});
}
Не работает. Я не знаю почему. Может у пожалуйста, помогите
Просто небольшая коррекция здесь. 1 Кажется, это значение для зеленого, а не 0. –
@DangerZone: вы совершенно правы, приятно поймать: 'PBST_NORMAL = 0x0001;/* green */'; однако, если значение вне диапазона '[1..3]', будет использоваться зеленый. Я отредактировал ответ –
Вы уверены, что это так? Я взломал небольшое тестовое приложение, чтобы переключаться между разными цветами (чтобы проверить, как он будет работать в более крупной программе), и, похоже, сохраняет текущий цвет, если он находится вне [1..3]. –