Winform中设置ZedGraph当前所有曲线的颜色
場景
Winforn中設置ZedGraph曲線圖的屬性、坐標軸屬性、刻度屬性:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100112573
當ZedGraph的圖形渲染完成后,添加設置所有曲線顏色功能。
注:
博客主頁:
https://blog.csdn.net/badao_liumang_qizhi
關注公眾號
霸道的程序猿
獲取編程相關電子書、教程推送與免費下載。
實現
首先在ZedGraph的右鍵菜單中添加設置曲線顏色選項,在面板初始化的方法中訂閱右鍵事件。
zgc.ContextMenuBuilder -= zgc_ContextMenuBuilder;???? //上下文菜單生成事件訂閱 zgc.ContextMenuBuilder += zgc_ContextMenuBuilder;???? //上下文菜單生成事件訂閱然后在訂閱的方法中
private static void zgc_ContextMenuBuilder(ZedGraphControl control, ContextMenuStrip menuStrip, Point mousePt, ZedGraphControl.ContextMenuObjectState objState){#region 擴展上下文菜單#region 圖形選項菜單ToolStripMenuItem mnuChartOption = new ToolStripMenuItem();???? //新建菜單項對象mnuChartOption.Name = "set_curve_color";mnuChartOption.Text = "設置曲線顏色";//點擊彈出圖形選項對話框mnuChartOption.Click += delegate(object sender, EventArgs e){if (curveModelList == null || curveModelList.Count == 0){XtraMessageBox.Show("當前沒有曲線");}else{FrmSetCurveColor setCurveColor = new FrmSetCurveColor();DialogResult result = setCurveColor.ShowDialog();?????????????????????????????? //顯示Dialogif (result == DialogResult.OK){TriggerSetCurveColor();XtraMessageBox.Show("設置曲線顏色成功");}}};menuStrip.Items.Add(mnuChartOption);??????? //把圖形選項對話框添加到上下文菜單中#endregion#endregion#region 漢化上下文菜單中的菜單項foreach (ToolStripMenuItem item in menuStrip.Items){switch (item.Name){case "copied_to_clip":item.Text = @"復制到剪貼板";break;case "copy":item.Text = @"復制";break;case "page_setup":item.Text = @"頁面設置...";break;case "print":item.Text = @"打印...";break;case "save_as":item.Text = @"另存圖表...";break;case "set_default":item.Text = @"恢復默認大小";break;case "show_val":item.Text = @"顯示節點數值";break;case "title_def":item.Text = @"標題";break;case "undo_all":item.Text = @"還原所有縮放";break;case "unpan":item.Text = @"還原上一步縮放";break;case "unzoom":item.Text = @"還原縮放";break;case "set_curve_color":item.Text = @"設置曲線顏色";break;}}#endregion}此時會漢化右鍵菜單并添加右鍵選項,并且其點擊事件是打開設置曲線顏色面板。
?
在設置曲線顏色面板的代碼中,在其load方法中調用初始化面板的方法,
此時要根據傳遞的曲線的Model的list去生成當前已有曲線的設置的panel。
那么當前已經有多少個曲線是如何傳遞的?
在前面ZedGraph生成曲線的地方所在的工具類中聲明一個全局的list
public static List<CurveModel> curveModelList= new List<CurveModel>();其中CurveModel是自定義的存取曲線屬性的Model類
?public class CurveModel{/// <summary>/// 曲線序號/// </summary>private int curveIndex;public int CurveIndex{get { return curveIndex; }set { curveIndex = value; }}/// <summary>/// 源文件/// </summary>private string originFile;public string OriginFile{get { return originFile; }set { originFile = value; }}/// <summary>/// 源文件完整路徑/// </summary>private string originFileFullPath;public string OriginFileFullPath{get { return originFileFullPath; }set { originFileFullPath = value; }}/// <summary>/// 屬性名/// </summary>private string attributeName;public string AttributeName{get { return attributeName; }set { attributeName = value; }}/// <summary>/// 顏色/// </summary>private string color;public string Color{get { return color; }set { color = value; }}}?聲明完list后,其中生成曲線的地方也在這個工具類中
curveModelList.Clear();int curveIndex = 0;for (int k = 0; k < compTestDataList.Count; k++){//循環添加曲線for (int i = 0; i < yList.Count; i++){SymbolType symbolType = GetCurveSimple(yList[i].CurveType);??????????????????????????????? //根據配置文件中曲線符號類型返回曲線符號標識list = SetCurveText(interval, xAttribute.TitleKey, yList[i].TitleKey, compTestDataList[k]);LineItem myCurve = myPane.AddCurve(yList[i].Title, list, System.Drawing.ColorTranslator.FromHtml(yList[i].Color), symbolType);myCurve = SetCurveType(myCurve,symbolType, yList[i].Type, yList[i].Color);???????????????????????? //根據配置文件設置曲線類型myCurve.YAxisIndex = i;???????????????????????????????????????????????????????????????? //很關鍵,對應使用那個坐標值CurveModel curveModel = new CurveModel();string originFile = compTestDataList[k].ThisDataFile;curveModel.OriginFile = originFile.Substring(originFile.LastIndexOf("\\") + 1);curveModel.CurveIndex = curveIndex;curveModel.OriginFileFullPath = originFile;curveModel.AttributeName = yList[i].Title;curveModel.Color = yList[i].Color;curveModelList.Add(curveModel);curveIndex++;}}這樣在生成曲線
時就將當前圖形的所有曲線的屬性存到一個工具類中全局的一個list中,然后在設置曲線顏色面板中獲取這個list。
然后在使用這個list去初始化設置顏色的面板
? private void initSetCurveColorPane(List<CurveModel> curveModelList){int panelControlHeight = 20;int panelControlWidth = 50;foreach(CurveModel curve in curveModelList){PanelControl panelControl = new PanelControl();#region 生成一個Label標識X軸//生成一個Label標識X軸LabelControl label = new LabelControl();label.Text = "第" + (curve.CurveIndex + 1).ToString() + "條曲線(" + curve.OriginFile + "的" + curve.AttributeName + ")的顏色為:";label.Location = new Point(Global.NOGROUP_HORIZONTAL_DISTANCE, Global.GROUP_VERTICAL_DISTANCE);label.Parent = panelControl;#endregion#region 生成一個顏色選擇器//添加顏色選擇器ColorEdit colorEditX = new ColorEdit();colorEditX.Text = curve.Color;colorEditX.Width = Global.CHART_OPTION_WIDTH;colorEditX.Location = new Point(Global.NOGROUP_HORIZONTAL_DISTANCE * 2 + label.Width, Global.GROUP_VERTICAL_DISTANCE);colorEditX.Parent = panelControl;colorEditX.Name = "colorEdit"+curve.CurveIndex;#endregion#region 設置X軸Panel的位置以及屬性//設置panel的寬度panelControl.Width = label.Width + colorEditX.Width + Global.NOGROUP_HORIZONTAL_DISTANCE * 3;//設置panel的高度panelControl.Height = label.Height + Global.GROUP_VERTICAL_DISTANCE * 2;panelControlHeight = panelControl.Height;panelControlWidth = panelControl.Width;//設置panel的位置panelControl.Location = new Point(Global.NOGROUP_HORIZONTAL_DISTANCE, (panelControl.Height * curve.CurveIndex) + (Global.GROUP_VERTICAL_DISTANCE *(curve.CurveIndex + 1)));//設置NamepanelControl.Name = "panelControl" + curve.CurveIndex;//將panel添加到當前窗體this.Controls.Add(panelControl);#endregion}this.Width = panelControlWidth + Global.NOGROUP_HORIZONTAL_DISTANCE * 4;this.Height = (curveModelList.Count + 1) * panelControlHeight + (curveModelList.Count + 2) * Global.GROUP_VERTICAL_DISTANCE + +this.panelControl1.Height;}?
然后設置顏色后,點擊保存后在確定按鈕的點擊事件中
?private void simpleButton2_Click_1(object sender, EventArgs e){for (int i = 0; i < curveModelList.Count; i++){ColorEdit colorEditY = this.Controls.Find("colorEdit" + i, true)[0] as ColorEdit;curveModelList[i].Color = colorEditY.Text;}this.DialogResult = System.Windows.Forms.DialogResult.OK;}再將設置的顏色屬性賦值給當前設置顏色面板作用域的list
List<CurveModel> curveModelList = new List<CurveModel>();此時窗體返回OK,再回到右鍵打開窗口的地方
if (result == DialogResult.OK){TriggerSetCurveColor();XtraMessageBox.Show("設置曲線顏色成功");}此時會觸發設置曲線顏色的方法
?public static void TriggerSetCurveColor(){if (OnSetCurveColor != null){OnSetCurveColor(null, System.EventArgs.Empty);}}?此事件聲明
public static event EventHandler OnSetCurveColor;事件會在圖形所在的頁面進行訂閱
ChartCompareHelper.OnSetCurveColor + = ChartCompareHelper_OnSetCurveColor;?訂閱執行的方法
private void ChartCompareHelper_OnSetCurveColor(object sender, EventArgs e){ChartCompareHelper.SetCurveColor(this.zedGraphControl1);}此方法傳遞當前ZedGraph對象
?public static void SetCurveColor(ZedGraphControl zedGraphControl){for (int i = 0; i < curveModelList.Count;i++){zedGraphControl.GraphPane.CurveList[i].Color = System.Drawing.ColorTranslator.FromHtml(curveModelList[i].Color);}zedGraphControl.GraphPane.AxisChange();zedGraphControl.Refresh();zedGraphControl.Invalidate();}然后按順序設置曲線顏色。
總結
以上是生活随笔為你收集整理的Winform中设置ZedGraph当前所有曲线的颜色的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringCloud-使用路由网关的服
- 下一篇: DevExpress的TreeList怎