場景 在ZedGraph隨機生成顏色時需要從顏色數組中取顏色對象。 Color數組存取的是System.Drawing.Color的顏色。 其順序是相鄰的顏色,顏色差距不大,在取顏色時按順序取顏色時,如果顏色條數比較少,差距會不明顯。 需要將此數組的順序打亂,隨機進行排序。 註: 博客主頁: htt ...
場景
在ZedGraph隨機生成顏色時需要從顏色數組中取顏色對象。
Color數組存取的是System.Drawing.Color的顏色。
其順序是相鄰的顏色,顏色差距不大,在取顏色時按順序取顏色時,如果顏色條數比較少,差距會不明顯。
需要將此數組的順序打亂,隨機進行排序。
註:
博客主頁:
https://blog.csdn.net/badao_liumang_qizhi
關註公眾號
霸道的程式猿
獲取編程相關電子書、教程推送與免費下載
實現
首先附從System.Drawing.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();
然後進行隨機打亂順序排序
colors = GetDisruptedItems(colors);
調用亂序方法
private static Color[] GetDisruptedItems(Color[] colors) { //生成一個新數組:用於在之上計算和返回 Color[] temp; temp = new Color[colors.Length]; for (int i = 0; i < temp.Length; i++) { temp[i] = colors[i]; } //打亂數組中元素順序 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; }
這裡根據需要修改為自己需要的對象,獲取將其直接改為泛型。