ProgressBar的颜色没有更改c#

本文关键字:颜色 ProgressBar | 更新日期: 2023-09-27 18:26:39

我的要求是,每当我单击按钮时,都要将进度条的颜色更改为红色。我不想评论Application.EnableVisualStyles().

所以我尝试使用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;
        });
    }

它不起作用。我不知道为什么。你能帮助吗

ProgressBar的颜色没有更改c#

如果您想将ProgressBar颜色从初始的绿色更改为红色(这是标准状态),您可以简单地执行

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

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

实施:

  this.Invoke(() => {
    progressBar1.Value = progressBar1.Maximum;
    progressBar1.Style = ProgressBarStyle.Continuous;
    SendMessage(progressBar1.Handle, 1040, 2, 0); 
  });