马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

Winform中跨窗体设置Zedgraph的属性并刷新曲线图

[复制链接]
查看1802 | 回复0 | 2019-9-17 11:31:44 | 显示全部楼层 |阅读模式

场景

在利用ZedGraph时,常常有图形选项功能,设置曲线图相干属性后,

点击生存会设置另一个窗体的属性并刷新图。

结果

113349quuzt8yv8zeoztyh.gif

实现

在设置图形的选项的类中,声明委托和事件

  1. //委托的界说
  2. public delegate void ReloadPanelDelegete();
  3. //事件声明
  4. public static event ReloadPanelDelegete reloadPanelEvent;
复制代码

在当前窗体简直定按钮的点击事件中

将相干曲线图的Y轴以及X轴的相干属性存到xml设置文件中,然后调用方法

去刷新曲线图,使其重新加载。

  1. private void confirmbButton_Click(object sender, EventArgs e)
  2. {
  3. #region 获取X轴的属性并赋值给XAxisModel
  4. //对X轴的属性设置文件进行生存
  5. //根据控件的 System.Windows.Forms.Control.Name 属性搜刮控件并生成由所有匹配项组成的数组。
  6. //如果搜刮所有子控件,则为 true;否则为 false。
  7. XAxisModel xAxisModel = new XAxisModel();
  8. //获取标题
  9. RadioGroup radioGroupX = this.Controls.Find("radioGroupX", true)[0] as RadioGroup;
  10. xAxisModel.Title = radioGroupX.Text;
  11. //获取下限
  12. TextEdit minTextEditX = this.Controls.Find("minTextEditX", true)[0] as TextEdit;
  13. xAxisModel.Min = Double.Parse(minTextEditX.Text);
  14. //获取上限
  15. TextEdit maxTextEditX = this.Controls.Find("maxTextEditX", true)[0] as TextEdit;
  16. xAxisModel.Max = Double.Parse(maxTextEditX.Text);
  17. //获取颜色
  18. ColorEdit colorEditX = this.Controls.Find("colorEditX", true)[0] as ColorEdit;
  19. xAxisModel.Color = colorEditX.Text;
  20. #endregion
  21. #region 将X轴的属性存到设置文件中
  22. Boolean isWriteX = ChartOptionHelper.setXAxisAttribute(xAxisModel);
  23. #endregion
  24. #region 获取Y轴属性并赋值给List<YAxisModel>
  25. List<YAxisModel> yAxisModelList = new List<YAxisModel>();
  26. for (int i = 1; i <= yAxisCount; i++)
  27. {
  28. YAxisModel yAxisModel = new YAxisModel();
  29. //获取标题
  30. RadioGroup radioGroupY = this.Controls.Find("radioGroupY" + i, true)[0] as RadioGroup;
  31. yAxisModel.Title = radioGroupY.Text;
  32. //获取下限
  33. TextEdit minTextEditY = this.Controls.Find("minTextEditY" + i, true)[0] as TextEdit;
  34. yAxisModel.Min = Double.Parse(minTextEditY.Text);
  35. //获取上限
  36. TextEdit maxTextEditY = this.Controls.Find("maxTextEditY" + i, true)[0] as TextEdit;
  37. yAxisModel.Max = Double.Parse(maxTextEditY.Text);
  38. //获取颜色
  39. ColorEdit colorEditY = this.Controls.Find("colorEditY" + i, true)[0] as ColorEdit;
  40. yAxisModel.Color = colorEditY.Text;
  41. yAxisModelList.Add(yAxisModel);
  42. }
  43. #endregion
  44. #region 将Y轴的属性存到设置文件中
  45. Boolean isWriteY = ChartOptionHelper.setYAxisAttribute(yAxisModelList);
  46. #endregion
  47. #region 弹出对话框并设置点击确定之后的事件
  48. if (isWriteX == true && isWriteY == true)
  49. {
  50. if (this.Confirm("生存乐成") == DialogResult.OK)
  51. {
  52. //将是否第一次打开软件的标识量改为0,,下次打开直接读取设置文件
  53. Global.isFirstOpen = 0;
  54. if (reloadPanelEvent != null)
  55. {
  56. reloadPanelEvent();
  57. }
  58. this.Dispose();
  59. }
  60. }
  61. else
  62. {
  63. DevExpress.XtraEditors.XtraMessageBox.Show("生存失败", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
  64. }
  65. #endregion
  66. }
复制代码

然后在曲线图显示的窗体中订阅事件

Dialog.ChartOption.reloadPanelEvent += new Dialog.ChartOption.ReloadPanelDelegete(reloadPanel);

此中左边的类是上面图形选项的类,右边的类是窗体显示的类

然后在窗体显示的类中新建图上面ReloadPanelDelegete的参数同名的方法reloadPanel实现曲线图的刷新。

  1. public void reloadPanel()
  2. {
  3. //声明pane对象
  4. GraphPane myPane = new GraphPane();
  5. //获取控件的Pane
  6. myPane = this.zedGraphControl1.GraphPane;
  7. #region 从设置文件中加载并设置X轴属性
  8. //获取X轴属性
  9. XAxisModel xAttribute = ChartOptionHelper.getXAxisAttribute(Global.RADIO_GROUP_YAXIS_FILEPATH_X);
  10. myPane.XAxis.Title.Text = xAttribute.Title;
  11. myPane.XAxis.Color = System.Drawing.ColorTranslator.FromHtml(xAttribute.Color);
  12. myPane.XAxis.Scale.Min = xAttribute.Min;
  13. myPane.XAxis.Scale.Max = xAttribute.Max;
  14. #endregion
  15. //获取设置文件加载的Y轴的list
  16. List<YAxisModel> yLoadList = ChartOptionHelper.getYAxisList(Global.RADIO_GROUP_YAXIS_FILEPATH);
  17. //用来存储标题不为空的list
  18. List<YAxisModel> yList = new List<YAxisModel>();
  19. foreach (YAxisModel yAxisModel in yLoadList)
  20. {
  21. if (!yAxisModel.Title.Equals(""))
  22. {
  23. yList.Add(yAxisModel);
  24. }
  25. }
  26. //根据数目生成Y轴
  27. //说明选择满是空标题
  28. if (yList.Count == 0)
  29. {
  30. //设置X轴标题
  31. myPane.XAxis.Title.Text = "时间";
  32. //X轴线的颜色
  33. myPane.XAxis.Color = Color.Black;
  34. //设置第一条Y轴标题
  35. myPane.YAxis.Title.Text = "Y1";
  36. this.zedGraphControl1.Invalidate();
  37. }
  38. else if (yList.Count == 1)
  39. {
  40. //设置第一条Y轴标题
  41. myPane.YAxis.Title.Text = yList[0].Title;
  42. myPane.YAxis.Scale.Min = yList[0].Min;
  43. myPane.YAxis.Scale.Max = yList[0].Max;
  44. myPane.YAxis.Color = System.Drawing.ColorTranslator.FromHtml(yList[0].Color);
  45. myPane.Y2Axis.Title.FontSpec.FontColor = System.Drawing.ColorTranslator.FromHtml(yList[0].Color);
  46. myPane.YAxis.Scale.FontSpec.FontColor = System.Drawing.ColorTranslator.FromHtml(yList[0].Color);
  47. this.zedGraphControl1.Invalidate();
  48. }
  49. else if (yList.Count == 2)
  50. {
  51. //设置第一条Y轴标题
  52. myPane.YAxis.Title.Text = yList[0].Title;
  53. myPane.YAxis.Scale.Min = yList[0].Min;
  54. myPane.YAxis.Scale.Max = yList[0].Max;
  55. myPane.YAxis.Color = System.Drawing.ColorTranslator.FromHtml(yList[0].Color);
  56. myPane.YAxis.Color = System.Drawing.ColorTranslator.FromHtml(yList[0].Color);
  57. myPane.Y2Axis.Title.FontSpec.FontColor = System.Drawing.ColorTranslator.FromHtml(yList[0].Color);
  58. //第二条Y轴标题
  59. myPane.Y2Axis.Title.Text = yList[1].Title;
  60. //第二条Y轴下限
  61. myPane.Y2Axis.Scale.Min = yList[1].Min;
  62. //第二条Y轴上限
  63. myPane.Y2Axis.Scale.Max = yList[1].Max;
  64. //设置颜色
  65. myPane.Y2Axis.Color = System.Drawing.ColorTranslator.FromHtml(yList[1].Color);
  66. //设置刻度线字体颜色
  67. myPane.Y2Axis.Scale.FontSpec.FontColor = System.Drawing.ColorTranslator.FromHtml(yList[1].Color);
  68. //设置标题字体颜色
  69. myPane.Y2Axis.Title.FontSpec.FontColor = System.Drawing.ColorTranslator.FromHtml(yList[1].Color);
  70. //标题大小
  71. myPane.Y2Axis.Title.FontSpec.Size = Global.FONT_SIZE;
  72. myPane.Y2Axis.Title.FontSpec.Family = Global.FONT_FAMILY;
  73. myPane.Y2Axis.Title.FontSpec.IsBold = false;
  74. //显示小刻度 是false则看不到结果
  75. myPane.Y2Axis.MinorGrid.IsVisible = true;
  76. //设置Y轴刻度线字体大小
  77. myPane.Y2Axis.Scale.FontSpec.Size = Global.FONT_SIZE;
  78. //让第二条Y轴显示
  79. myPane.Y2Axis.IsVisible = true;
  80. this.zedGraphControl1.Invalidate();
  81. }
  82. //否则就是新增第三条及以上
  83. else
  84. {
  85. //设置第一条Y轴标题
  86. myPane.YAxis.Title.Text = yList[0].Title;
  87. myPane.YAxis.Scale.Min = yList[0].Min;
  88. myPane.YAxis.Scale.Max = yList[0].Max;
  89. myPane.YAxis.Scale.FontSpec.FontColor = System.Drawing.ColorTranslator.FromHtml(yList[0].Color);
  90. myPane.YAxis.Color = System.Drawing.ColorTranslator.FromHtml(yList[0].Color);
  91. //第二条Y轴标题
  92. myPane.Y2Axis.Title.Text = yList[1].Title;
  93. myPane.Y2Axis.Title.FontSpec.FontColor = System.Drawing.ColorTranslator.FromHtml(yList[0].Color);
  94. //第二条Y轴下限
  95. myPane.Y2Axis.Scale.Min = yList[1].Min;
  96. //第二条Y轴上限
  97. myPane.Y2Axis.Scale.Max = yList[1].Max;
  98. //设置颜色
  99. myPane.Y2Axis.Color = System.Drawing.ColorTranslator.FromHtml(yList[1].Color);
  100. //设置刻度线字体颜色
  101. myPane.Y2Axis.Scale.FontSpec.FontColor = System.Drawing.ColorTranslator.FromHtml(yList[1].Color);
  102. //设置标题字体颜色
  103. myPane.Y2Axis.Title.FontSpec.FontColor = System.Drawing.ColorTranslator.FromHtml(yList[1].Color);
  104. //标题大小
  105. myPane.Y2Axis.Title.FontSpec.Size = Global.FONT_SIZE;
  106. myPane.Y2Axis.Title.FontSpec.Family = Global.FONT_FAMILY;
  107. myPane.Y2Axis.Title.FontSpec.IsBold = false;
  108. //显示小刻度 是false则看不到结果
  109. myPane.Y2Axis.MinorGrid.IsVisible = true;
  110. //设置Y轴刻度线字体大小
  111. myPane.Y2Axis.Scale.FontSpec.Size = Global.FONT_SIZE;
  112. //让第二条Y轴显示
  113. myPane.Y2Axis.IsVisible = true;
  114. #region 第一次加载其他的Y轴,要在Y轴的List中add进Y轴
  115. //说明是第一次加载其他的Y轴,要在Y轴的List中add进Y轴
  116. if (myPane.YAxisList.Count == 1)
  117. {
  118. //循环剩下的Y轴并显示
  119. for (int i = 2; i < yList.Count; i++)
  120. {
  121. YAxis yAxisNew = new YAxis(yList[i].Title);
  122. yAxisNew.Scale.Min = yList[i].Min;
  123. yAxisNew.Scale.Max = yList[i].Max;
  124. //设置Y轴颜色
  125. yAxisNew.Color = System.Drawing.ColorTranslator.FromHtml(yList[i].Color);
  126. //设置刻度线字体颜色
  127. yAxisNew.Scale.FontSpec.FontColor = System.Drawing.ColorTranslator.FromHtml(yList[i].Color);
  128. //设置标题字体颜色
  129. yAxisNew.Title.FontSpec.FontColor = System.Drawing.ColorTranslator.FromHtml(yList[i].Color);
  130. yAxisNew.Type = AxisType.Text;
  131. //显示小刻度 是false则看不到结果
  132. yAxisNew.MinorGrid.IsVisible = true;
  133. //关闭相反的tics,使y2 tics不会显示在y轴上
  134. yAxisNew.MajorTic.IsInside = true;
  135. yAxisNew.MinorTic.IsInside = true;
  136. yAxisNew.MajorTic.IsOpposite = true;
  137. yAxisNew.MinorTic.IsOpposite = true;
  138. yAxisNew.Title.FontSpec.Family = Global.FONT_FAMILY;
  139. yAxisNew.Title.FontSpec.Size = Global.FONT_SIZE;
  140. yAxisNew.Title.FontSpec.IsBold = false;
  141. //设置Y轴刻度线字体大小
  142. yAxisNew.Scale.FontSpec.Size = Global.FONT_SIZE;
  143. //添加到Y轴的list
  144. myPane.YAxisList.Add(yAxisNew);
  145. }
  146. }
  147. #endregion
  148. else
  149. {
  150. //循环剩下的Y轴并显示
  151. for (int i = 1; i < myPane.YAxisList.Count; i++)
  152. {
  153. myPane.YAxisList[i].Scale.Min = yList[i+1].Min;
  154. myPane.YAxisList[i].Scale.Max = yList[i + 1].Max;
  155. //设置Y轴颜色
  156. myPane.YAxisList[i].Color = System.Drawing.ColorTranslator.FromHtml(yList[i+1].Color);
  157. //设置刻度线字体颜色
  158. myPane.YAxisList[i].Scale.FontSpec.FontColor = System.Drawing.ColorTranslator.FromHtml(yList[i + 1].Color);
  159. //设置标题字体颜色
  160. myPane.YAxisList[i].Title.FontSpec.FontColor = System.Drawing.ColorTranslator.FromHtml(yList[i + 1].Color);
  161. myPane.YAxisList[i].Type = AxisType.Text;
  162. //显示小刻度 是false则看不到结果
  163. myPane.YAxisList[i].MinorGrid.IsVisible = true;
  164. //关闭相反的tics,使y2 tics不会显示在y轴上
  165. myPane.YAxisList[i].MajorTic.IsInside = true;
  166. myPane.YAxisList[i].MinorTic.IsInside = true;
  167. myPane.YAxisList[i].MajorTic.IsOpposite = true;
  168. myPane.YAxisList[i].MinorTic.IsOpposite = true;
  169. myPane.YAxisList[i].Title.FontSpec.Family = Global.FONT_FAMILY;
  170. myPane.YAxisList[i].Title.FontSpec.Size = Global.FONT_SIZE;
  171. myPane.YAxisList[i].Title.FontSpec.IsBold = false;
  172. //设置Y轴刻度线字体大小
  173. myPane.YAxisList[i].Scale.FontSpec.Size = Global.FONT_SIZE;
  174. }
  175. }
  176. this.zedGraphControl1.Invalidate();
  177. }
  178. }
复制代码

注:

1.mypane是ZedGraph的面板,其默认是有一条Y轴对象的,为myPane.YAxis

2.如果要显示第二条Y轴,ZedGraph是默认存在第二条Y轴的,为myPane.Y2Axis,不外就是默认不显示,要使其显示,须要myPane.Y2Axis.IsVisible = true;

3.如果是三条以上Y轴的话,就要利用

  1. myPane.YAxisList.Add(yAxisNew);
复制代码

加入其Y轴的list。

4.这里的需求是初次打开默认加载一条Y轴,以是在初次加载时判断

myPane.YAxisList.Count == 1,其本身的List是否为1,为1则代表是初次加载,下次再设置并加载时,其list就不为1了。以是须要是设置,而不是再往list中新增了。

5.须要注意的是,如果显示4条Y轴的话,其myPane.YAxisList.Count为3,,一条是不算在内的。

6.刷新曲线图的代码

  1. this.zedGraphControl1.Invalidate();
复制代码







来源:https://www.cnblogs.com/badaoliumangqizhi/archive/2019/09/16/11525826.html
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则