場(chǎng)景在使用ZedGraph生成多條曲線時(shí)為了能區(qū)分曲線顏色,要求隨機(jī)設(shè)置曲線顏色。 首先從System.Drawing.Color中獲取所有顏色的對(duì)象的數(shù)組,然后將其順序打亂隨機(jī)排序,然后在生成曲線時(shí)從Color數(shù)組中取Color并賦值。 效果
注: 博客主頁: 實(shí)現(xiàn)單純生成曲線的代碼 LineItem myCurve = myPane.AddCurve(yList[i].Title, list, curveColor, SymbolType.None); 第一個(gè)參數(shù):圖例標(biāo)題 第二個(gè)參數(shù):坐標(biāo)點(diǎn)的list 第三個(gè)參數(shù):顏色Color對(duì)象 第四個(gè)參數(shù):曲線節(jié)點(diǎn)符號(hào) 所以在生成曲線時(shí)就要在第三個(gè)參數(shù)上進(jìn)行修改 首先獲取Color的所有顏色對(duì)象 //用于存取取出的顏色對(duì)象 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); } } //轉(zhuǎn)成數(shù)組 Color[] colors = colorList.ToArray();
然后將Color數(shù)組的順序進(jìn)行打亂 colors = GetDisruptedItems(colors);
調(diào)用亂序方法 private static Color[] GetDisruptedItems(Color[] colors) { //生成一個(gè)新數(shù)組:用于在之上計(jì)算和返回 Color[] temp; temp = new Color[colors.Length]; for (int i = 0; i < temp.Length; i++) { temp[i] = colors[i]; } //打亂數(shù)組中元素順序 Random rand = new Random(DateTime.Now.Millisecond); for (int i = 0; i < temp.Length; i++) { int x, y; Color t; x = rand.Next(0, temp.Length); do { y = rand.Next(0, temp.Length); } while (y == x); t = temp[x]; temp[x] = temp[y]; temp[y] = t; } return temp; }
然后在循環(huán)生成曲線時(shí),循環(huán)條件為要生成的曲線數(shù)量與顏色數(shù)組的長度進(jìn)行對(duì)比判斷。 int index = 0; //循環(huán)添加曲線 foreach(DataTreeNode node in Global.Instance.PrepareCompareDataInOne) { list = SetCurveTextInOne(yList[i].TitleKey,record); //如果要生成的曲線數(shù)量 < 顏色數(shù)組長度 那么就從顏色數(shù)組中去按索引取 Color curveColor = new Color(); if (Global.Instance.PrepareCompareDataInOne.Count < colors.Length) { curveColor = colors[index]; } //否則要生成的曲線數(shù)量 > 顏色數(shù)組長度 else { //當(dāng)索引達(dá)到顏色數(shù)組的長度時(shí) 索引置0 if (index >= colors.Length) { index = 0; } curveColor = colors[index]; } LineItem myCurve = myPane.AddCurve(yList[i].Title, list, curveColor, SymbolType.None); index++; }
其中Global.Instance.PrepareCompareDataInOne就是要生成的曲線的數(shù)據(jù),其Count就是要生成的曲線數(shù)量。 |
|