日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Winform中设置ZedGraph当前所有曲线的颜色

發布時間:2025/3/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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。

private void FrmSetCurveColor_Load(object sender, EventArgs e){curveModelList.Clear();curveModelList = ChartCompareHelper.curveModelList;initSetCurveColorPane(curveModelList);}

然后在使用這個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当前所有曲线的颜色的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。