我的要求是每当我点击按钮时将进度条的颜色更改为红色.我不想注释掉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颜色从初始绿色更改为红色(这是标准状态),您可以简单地执行此操作
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); });