场景

在使用ZedGraph生成多条曲线时为了能区分曲线颜色,要求随机设置曲线颜色。

首先从System.Drawing.Color中获取所有颜色的对象的数组,然后将其顺序打乱随机排序,然后在生成曲线时从Color数组中取Color并赋值。

效果

注:

博客主页:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

单纯生成曲线的代码

LineItem myCurve = myPane.AddCurve(yList[i].Title, list, curveColor, SymbolType.None);

第一个参数:图例标题

第二个参数:坐标点的list

第三个参数:颜色Color对象

第四个参数:曲线节点符号

所以在生成曲线时就要在第三个参数上进行修改

首先获取Color的所有颜色对象

//用于存取取出的颜色对象
List<Color> colorList = new List<Color>();
//通过GetMember获取所有的公共成员
foreach (var item in typeof(Color).GetMembers())
{
//只取属性且为属性中的已知Color,剔除byte属性以及一些布尔属性等(A B G R IsKnownColor Name等)
if (item.MemberType == System.Reflection.MemberTypes.Property && System.Drawing.Color.FromName (item.Name).IsKnownColor == true)
{
Color color = System.Drawing.Color.FromName(item.Name);
colorList.Add(color);
}
}
//转成数组
Color[] colors = colorList.ToArray();

然后将Color数组的顺序进行打乱

colors = GetDisruptedItems(colors);

调用乱序方法

private static Color[] GetDisruptedItems(Color[] colors)
{
//生成一个新数组:用于在之上计算和返回
Color[] temp;
temp = new Color[colors.Length];
for (int i = ; i < temp.Length; i++)
{
temp[i] = colors[i];
} //打乱数组中元素顺序
Random rand = new Random(DateTime.Now.Millisecond);
for (int i = ; i < temp.Length; i++)
{
int x, y; Color t;
x = rand.Next(, temp.Length);
do
{
y = rand.Next(, temp.Length);
} while (y == x); t = temp[x];
temp[x] = temp[y];
temp[y] = t;
} return temp; }

然后在循环生成曲线时,循环条件为要生成的曲线数量与颜色数组的长度进行对比判断。

int index = ;
//循环添加曲线
foreach(DataTreeNode node in Global.Instance.PrepareCompareDataInOne)
{ list = SetCurveTextInOne(yList[i].TitleKey,record);
//如果要生成的曲线数量 < 颜色数组长度 那么就从颜色数组中去按索引取
Color curveColor = new Color();
if (Global.Instance.PrepareCompareDataInOne.Count < colors.Length)
{
curveColor = colors[index];
}
//否则要生成的曲线数量 > 颜色数组长度
else
{
//当索引达到颜色数组的长度时 索引置0
if (index >= colors.Length)
{
index = ;
}
curveColor = colors[index];
}
LineItem myCurve = myPane.AddCurve(yList[i].Title, list, curveColor, SymbolType.None);
index++;
}

其中Global.Instance.PrepareCompareDataInOne就是要生成的曲线的数据,其Count就是要生成的曲线数量。

最新文章

  1. 资源等待类型sys.dm_os_wait_stats
  2. ABAP 内表的行列转换-发货通知单-打印到Excel里-NEW
  3. 关于.NET(c#)引用Dll后,找不到命名空间的问题
  4. 1045 整数礼物 c语言
  5. python 3.5 格式化字符串输出
  6. TFS跨版本Merge测试
  7. Geohash-》基本使用
  8. 立即掌握SSM框架的要诀
  9. 如何降低90%Java垃圾回收时间?以阿里HBase的GC优化实践为例
  10. SPFA求最短路——Bellman-Ford算法的优化
  11. mapreduce join
  12. netty01(长短连接、java)
  13. android AES 加密解密
  14. 高并发架构技术|缓存失效、缓存穿透问题 PHP 代码解决
  15. MySql详解(一)
  16. User Agent Strings列表 — Kejun&#39;s Blog
  17. django之创建第6-1个项目-自定义过滤器
  18. 2018.06.30 BZOJ 3932: [CQOI2015]任务查询系统(主席树)
  19. [转帖]什么高速线缆DAC?有了有源光缆AOC为何还选择DAC?
  20. hasura graphql 模式拼接demo

热门文章

  1. maven3常用命令、java项目搭建、web项目搭建详细图解(转)
  2. RIDE使用介绍
  3. 解决vue代理和跨域问题
  4. 【Java学习笔记】2015.1.5
  5. Tmux 中开启鼠标选择与复制
  6. ubuntu openssl 生成密钥对
  7. 2PC和3PC
  8. crontab定时执行datax
  9. (10)C++ 使用类
  10. jquery 找到指定父级指定子集