有没有发现,进度条组件progressBar1
是无法通过修改属性ForeColor
改变颜色的,默认只有绿色,参考其它的文档说是要重写进度条组件类,虽然是自定义的,但是绘制的效果不怎么样
- 另辟途径,新建一个类ProcessBarStyle,调用
user32.dll
库,代码如下
public class ProcessBarStyle
{
[DllImport("user32.dll")]
private static extern bool SendMessage(IntPtr hWnd, Int32 msg, Int32 wParam, Int32 lParam);
private ProgressBar progressBar1;
//传入进度条组件
public ProcessBarStyle(ProgressBar progressBar11)
{
this.progressBar1 = progressBar11;
}
//改变进度条颜色,只有三种颜色
public void changeStyle(int fore)
{
// 1040 - PBM_SETSTATE
SendMessage(progressBar1.Handle, 1040, fore, 0);
}
//三种颜色:2 - red (PBST_ERROR), 3 - yellow (PBST_PAUSED), 1 - green (PBST_NORMAL)
public class ForeColor
{
public static int Red = 2;
public static int Yellow = 3;
public static int Green = 1;
}
}
帮助文档参考 Windows应用开发 > PBM_SETSTATE
- 一个调用例子,如下所示
this.BeginInvoke(new Action(delegate (){
var pbStyle = new ProcessBarStyle(progressBar1);
pbStyle.changeStyle(ProcessBarStyle.ForeColor.Yellow);
//progressBar1.Enabled = false;
//progressBar1.ForeColor = SystemColors.InactiveCaption;
}));
- 调用后,运行效果图如下,当然,还可以改成红色的