2015-12-14 4 views
3

Мое требование - менять цвет индикатора выполнения на красный, когда я нажимаю кнопку. Я не хочу комментировать 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; 
     }); 
    } 

Не работает. Я не знаю почему. Может у пожалуйста, помогите

ответ

5

Если вы хотите изменить ProgressBar цвета от исходного Зеленый Красного (который является стандартного состояния) вы можете сделать просто

https://msdn.microsoft.com/ru-ru/library/windows/desktop/bb760850(v=vs.85).aspx

// 1040 - PBM_SETSTATE 
    // 2 - red (error), 3 - yellow (paused), 1 - green (in progress) 
    SendMessage(progressBar1.Handle, 1040, 2, 0); 

Реализацию:

this.Invoke(() => { 
    progressBar1.Value = progressBar1.Maximum; 
    progressBar1.Style = ProgressBarStyle.Continuous; 

    SendMessage(progressBar1.Handle, 1040, 2, 0); 
    }); 
+1

Просто небольшая коррекция здесь. 1 Кажется, это значение для зеленого, а не 0. –

+1

@DangerZone: вы совершенно правы, приятно поймать: 'PBST_NORMAL = 0x0001;/* green */'; однако, если значение вне диапазона '[1..3]', будет использоваться зеленый. Я отредактировал ответ –

+1

Вы уверены, что это так? Я взломал небольшое тестовое приложение, чтобы переключаться между разными цветами (чтобы проверить, как он будет работать в более крупной программе), и, похоже, сохраняет текущий цвет, если он находится вне [1..3]. –

Смежные вопросы