场景

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 == )
{
XtraMessageBox.Show("当前没有曲线");
}
else
{
FrmSetCurveColor setCurveColor = new FrmSetCurveColor();
DialogResult result = setCurveColor.ShowDialog(); //显示Dialog
if (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 = ;
for (int k = ; k < compTestDataList.Count; k++)
{
//循环添加曲线
for (int i = ; 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("\\") + );
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 = ;
int panelControlWidth = ;
foreach(CurveModel curve in curveModelList)
{
PanelControl panelControl = new PanelControl();
#region 生成一个Label标识X轴
//生成一个Label标识X轴
LabelControl label = new LabelControl();
label.Text = "第" + (curve.CurveIndex + ).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 * + 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 * ;
//设置panel的高度
panelControl.Height = label.Height + Global.GROUP_VERTICAL_DISTANCE * ;
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 + )));
//设置Name
panelControl.Name = "panelControl" + curve.CurveIndex;
//将panel添加到当前窗体
this.Controls.Add(panelControl); #endregion
} this.Width = panelControlWidth + Global.NOGROUP_HORIZONTAL_DISTANCE * ; this.Height = (curveModelList.Count + ) * panelControlHeight + (curveModelList.Count + ) * Global.GROUP_VERTICAL_DISTANCE + +this.panelControl1.Height;
}

然后设置颜色后,点击保存后在确定按钮的点击事件中

 private void simpleButton2_Click_1(object sender, EventArgs e)
{
for (int i = ; i < curveModelList.Count; i++)
{
ColorEdit colorEditY = this.Controls.Find("colorEdit" + i, true)[] 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 = ; 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当前所有曲线的颜色的更多相关文章

  1. Winform中设置ZedGraph鼠标悬浮显示举例最近曲线上的点的坐标值和X轴与Y轴的标题

    场景 Winform中设置ZedGraph鼠标双击获取距离最近曲线上的点的坐标值: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/ ...

  2. Winform中设置ZedGraph的曲线为散点图

    场景 Winform中设置ZedGraph的曲线符号Symbol以及对应关系: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  3. Winform中设置ZedGraph的曲线为折线、点折线、散点图

    场景 Winform中设置ZedGraph的曲线为散点图: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102465399 在上 ...

  4. Winform中设置ZedGraph多条Y轴时与多条曲线一一对应

    场景 Winform中实现ZedGraph的多条Y轴(附源码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1001322 ...

  5. Winform中设置ZedGraph的曲线符号Symbol以及对应关系

    场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  6. Winform中设置ZedGraph鼠标双击获取距离最近曲线上的点的坐标值

    场景 WInforn中设置ZedGraph的焦点显示坐标格式化以及显示三个坐标数的解决办法: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/det ...

  7. Winform中设置ZedGraph的X轴的刻度根据曲线获取

    场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  8. Winform中设置ZedGraph鼠标滚轮缩放的灵敏度以及设置滚轮缩放的方式(鼠标焦点为中心还是图形中心点)

    场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  9. Winform中设置ZedGraph多条Y轴时坐标轴左右显示设置

    场景 Winform中实现ZedGraph的多条Y轴(附源码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1001322 ...

随机推荐

  1. Python-警告处理

    python 下Warning的使用 起因是这样的,当我使用pymysql模块执行建表的sql语句时获,在控制台输出了红色的消息,但是程序并没有终止而是继续运行了 sql语句如下: CREATE TA ...

  2. C#在循环中使用Random时生成的随机数相同的解决办法

    场景 在循环中使用 Random y = new Random(); 生成随机数时每次循环生成的数是一样的. ; i < ;i++ ) { Random y = new Random(); Po ...

  3. AQS(抽象队列同步器)

    AQS(全称为AbstractQueuedSynchronizer),即抽象队列同步器,它维护了一个volatile int state(代表共享资源)和一个FIFO线程等待队列. state的访问方 ...

  4. CAD打印图纸要怎么操作?简单方法分享给你

    大家日常生活中多多少少的都接触到过CAD文件,CAD图是借助CAD制图软件来进行绘制完成的.唯一的困惑就是CAD图纸的格式大多数均为dwg格式的,查看起来不是那么的方便?所以很多设计师们都会选择将图纸 ...

  5. Shadow broker=>fuzzbunch+metasploit 攻击外网测试以及metasploit大批量扫描目标IP

    0x01 前言 4月14日,影子经纪人在steemit.com上公开了一大批NSA(美国国家安全局)“方程式组织” (Equation Group)使用的极具破坏力的黑客工具,其中包括可以远程攻破全球 ...

  6. 当时学习《鸟哥的Linux私房菜-基础学习篇》记录的点

    1.当执行一个指令的时候,举例来说[ls],系统会依照PATH的设定去每个PATH定义的目录下搜寻文件名为ls的可执行文件,如果在PATH定义的目录中含有多个文件名为ls的可执行文件,那么先搜寻到的同 ...

  7. go构建脚本ansible分发时出现的问题总结“non-zero return code”

    背景介绍: 在Jenkins服务器配置go项目发布脚本,编译完成后,使用ansible分发到部署服务器上,然后将启动项目脚本start_coachcore.sh发布到目标服务器上,执行启动,目标服务器 ...

  8. Troubleshooting ORA-30013 Error (Doc ID 1578717.1)

    Troubleshooting ORA-30013 Error (Doc ID 1578717.1) APPLIES TO: Oracle Database - Enterprise Edition ...

  9. CodeForces - 1257E (思维)

    题意 https://vjudge.net/problem/CodeForces-1257E 三个人,每个人有一些数字,组合起来是1~n,每个人可以给另一个人一个拥有的数字,问最小操作数,使得第一个人 ...

  10. 批量bat脚本复制文件或文件夹

    主要用于在本地下,复制文件或文件夹到当前文件夹 @echo off echo 复制文件或文件夹到当前文件夹(复制文件选择[],复制文件夹选择[]) set /p num=输入选择的数字: : set ...