场景
Winform控件-DevExpress18下载安装注册以及在VS中使用:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100061243
在使用ZedGraph进行添加曲线时,曲线数量如果很多的情况下,速度会比较慢。
所以在进行添加曲线的过程中需要显示进度,效果如下

注:
博客主页:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
在当前要添加进度条的页面打开设计器,并在安装了DevExpress的工具箱中拖拽一个ProgressBarControl

然后在当前窗体的构造方法中进行进度条控件的一些属性设置
public FrmCurveCompareInOne()
{
InitializeComponent();
progressBarControl1.Visible = true;
//设置一个最小值
progressBarControl1.Properties.Minimum = 0;
//设置一个最大值
progressBarControl1.Properties.Maximum = 100;
//设置进度条的样式
progressBarControl1.Properties.ProgressViewStyle = DevExpress.XtraEditors.Controls.ProgressViewStyle.Solid;
//当前值
progressBarControl1.Position = 0;
//是否显示进度数据
progressBarControl1.Properties.ShowTitle = true;
//是否显示百分比
progressBarControl1.Properties.PercentView = true;
}
然后在触发显示进度条的方法中传递当前进度条对象
ChartCompareHelper.RefreshPaneComInOne(this.zedGraphControl1, xYModelStore.YAxisModelList,this.progressBarControl1);
在上面刷新ZedGraph的图形的方法中,添加曲线的部分进行进度的设置
if (yList != null && yList.Count > 0)
{
PointPairList list = null;
for (int i = 0; i < yList.Count; i++)
{
//截取前100个循环进行显示
Global.Instance.PrepareCompareDataInOne = Global.Instance.PrepareCompareDataInOne.Where(p => (int.Parse(p.Id) < 101)).ToList();
//计算进度条步长
int step = 1;
//曲线总数小于100
if (Global.Instance.PrepareCompareDataInOne.Count < 100)
{
step = 100 / Global.Instance.PrepareCompareDataInOne.Count;
}
else
{
step = Global.Instance.PrepareCompareDataInOne.Count / 100;
}
if(progressBar !=null)
{
//将进度条初始化为0%
progressBar.Position = 0;
}
//循环添加曲线
foreach(DataTreeNode node in Global.Instance.PrepareCompareDataInOne)
{
IEnumerable<Entity.Record> record = Global.Instance.VirtualData.RecordDataList.Where(p => p.CycleIndex == int.Parse(node.Id));
list = SetCurveTextInOne(yList[i].TitleKey,record);
LineItem myCurve = myPane.AddCurve(yList[i].Title, list, System.Drawing.ColorTranslator.FromHtml(yList[i].Color), SymbolType.None);
myCurve.YAxisIndex = i; //很关键,对应使用那个坐标值
if(progressBar !=null)
{
//添加成功一条曲线则进度条增加一个步数
progressBar.Position += step;
if (progressBar.Position >=100)
{
//如果总进度已经大于100了 则赋值为100
progressBar.Position = 100;
}
//更新进度条的进度
progressBar.Update();
}
}
if (progressBar != null)
{
//最终添加完所有曲线后将进度条设置为100%
progressBar.Position = 100;
}
}