场景
在使用ZedGraph时,经常有图形选项功能,设置曲线图相关属性后,
点击保存会设置另一个窗体的属性并刷新图。
效果
实现
在设置图形的选项的类中,声明委托和事件
//委托的定义 public delegate void ReloadPanelDelegete(); //事件声明 public static event ReloadPanelDelegete reloadPanelEvent;
在当前窗体的确定按钮的点击事件中
将相关曲线图的Y轴以及X轴的相关属性存到xml配置文件中,然后调用方法
去刷新曲线图,使其重新加载。
private void confirmbButton_Click(object sender, EventArgs e) { #region 获取X轴的属性并赋值给XAxisModel //对X轴的属性配置文件进行保存 //根据控件的 System.Windows.Forms.Control.Name 属性搜索控件并生成由所有匹配项组成的数组。 //如果搜索所有子控件,则为 true;否则为 false。 XAxisModel xAxisModel = new XAxisModel(); //获取标题 RadioGroup radioGroupX = this.Controls.Find("radioGroupX", true)[0] as RadioGroup; xAxisModel.Title = radioGroupX.Text; //获取下限 TextEdit minTextEditX = this.Controls.Find("minTextEditX", true)[0] as TextEdit; xAxisModel.Min = Double.Parse(minTextEditX.Text); //获取上限 TextEdit maxTextEditX = this.Controls.Find("maxTextEditX", true)[0] as TextEdit; xAxisModel.Max = Double.Parse(maxTextEditX.Text); //获取颜色 ColorEdit colorEditX = this.Controls.Find("colorEditX", true)[0] as ColorEdit; xAxisModel.Color = colorEditX.Text; #endregion #region 将X轴的属性存到配置文件中 Boolean isWriteX = ChartOptionHelper.setXAxisAttribute(xAxisModel); #endregion #region 获取Y轴属性并赋值给List<YAxisModel> List<YAxisModel> yAxisModelList = new List<YAxisModel>(); for (int i = 1; i <= yAxisCount; i++) { YAxisModel yAxisModel = new YAxisModel(); //获取标题 RadioGroup radioGroupY = this.Controls.Find("radioGroupY" + i, true)[0] as RadioGroup; yAxisModel.Title = radioGroupY.Text; //获取下限 TextEdit minTextEditY = this.Controls.Find("minTextEditY" + i, true)[0] as TextEdit; yAxisModel.Min = Double.Parse(minTextEditY.Text); //获取上限 TextEdit maxTextEditY = this.Controls.Find("maxTextEditY" + i, true)[0] as TextEdit; yAxisModel.Max = Double.Parse(maxTextEditY.Text); //获取颜色 ColorEdit colorEditY = this.Controls.Find("colorEditY" + i, true)[0] as ColorEdit; yAxisModel.Color = colorEditY.Text; yAxisModelList.Add(yAxisModel); } #endregion #region 将Y轴的属性存到配置文件中 Boolean isWriteY = ChartOptionHelper.setYAxisAttribute(yAxisModelList); #endregion #region 弹出对话框并设置点击确定之后的事件 if (isWriteX == true && isWriteY == true) { if (this.Confirm("保存成功") == DialogResult.OK) { //将是否第一次打开软件的标识量改为0,,下次打开直接读取配置文件 Global.isFirstOpen = 0; if (reloadPanelEvent != null) { reloadPanelEvent(); } this.Dispose(); } } else { DevExpress.XtraEditors.XtraMessageBox.Show("保存失败", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question); } #endregion }
然后在曲线图显示的窗体中订阅事件
Dialog.ChartOption.reloadPanelEvent += new Dialog.ChartOption.ReloadPanelDelegete(reloadPanel);
其中左边的类是上面图形选项的类,右边的类是窗体显示的类
然后在窗体显示的类中新建图上面ReloadPanelDelegete的参数同名的方法reloadPanel实现曲线图的刷新。
public void reloadPanel() { //声明pane对象 GraphPane myPane = new GraphPane(); //获取控件的Pane myPane = this.zedGraphControl1.GraphPane; #region 从配置文件中加载并设置X轴属性 //获取X轴属性 XAxisModel xAttribute = ChartOptionHelper.getXAxisAttribute(Global.RADIO_GROUP_YAXIS_FILEPATH_X); myPane.XAxis.Title.Text