1.效果图:
2.思路:
底层其实是一个环形图chart控件,设置环形图内径大小。
整个环形图只有三个模块,其中一个模块设置与背景颜色相同,所以成了有小半个缺口的圆环假象。
剩下的两个模块一个用于显示数据进度,另一个给一个默认颜色。最后三个模块组合就成了仪表盘了。。
3.核心代码:
/// <summary>
/// </summary>
/// <param name="_Chart"></param>
/// <param name="chartColor">根据预警类型展示的颜色</param>
/// <param name="control">存储监测值的skinLabel控件</param>
/// <param name="monitorValue">监测值</param>
/// <param name="maxMonitorValue">预警监测最大值</param>
public void ChartMethod(Chart _Chart, Color chartColor, Control control, double monitorValue, double maxMonitorValue)
{
// 存储监测值的skinLabel也要修改颜色
control.ForeColor = chartColor;
control.Text = monitorValue + "";
double idxAY = 70;
double idxBY = 0;
if ((maxMonitorValue - monitorValue) > 0)
{
// 等比例转换所占份额大小
idxAY = (double)((monitorValue / maxMonitorValue) * 70.00);
idxBY = (double)(70.00 - idxAY);
}
//清空chart图表
_Chart.Series["Series1"].Points.Clear();
// 隐藏的区域
int idx = _Chart.Series["Series1"].Points.AddY(30);
DataPoint point = _Chart.Series["Series1"].Points[idx];
point.Color = _Chart.BackColor;
// 显示的值所占比例的区域
int idxA = _Chart.Series["Series1"].Points.AddY(idxAY);
DataPoint pointA = _Chart.Series["Series1"].Points[idxA];
pointA.Color = chartColor;
// 显示的非值部分所占比例的区域
int idxB = _Chart.Series["Series1"].Points.AddY(idxBY);
DataPoint pointB = _Chart.Series["Series1"].Points[idxB];
pointB.Color = Color.FromArgb(4, 83, 124);
}
private void Form1_Load(object sender, EventArgs e)
{
ChartMethod(chart6, Color.FromArgb(2, 209, 242), skinLabel39, 95.6, 120);
ChartMethod(chart7, Color.FromArgb(2, 209, 242), skinLabel42, 39, 120);
ChartMethod(chart8, Color.FromArgb(207, 166, 14), skinLabel45, 6.7, 15);
ChartMethod(chart9, Color.FromArgb(2, 209, 242), skinLabel48, 68.7, 120);
ChartMethod(chart10, Color.FromArgb(233, 81, 88), skinLabel51, 7, 12);
ChartMethod(chart11, Color.FromArgb(2, 209, 242), skinLabel54, 73, 120);
}
4.设置环形图角度:
5.设置环形图内径大小: