我想要做的是让listView中的每个项目都具有独特的颜色。所以我的列表视图中的项目数为'count'
我的方法是调用下面的方法并给出我的项目的方法编号,然后它应该有一个保存第一种颜色的数组,然后当要生成下一种颜色时,它应该与之前的颜色进行比较在阵列中。
问题是我无法弄清楚我需要什么样的阵列的方法,以及如何比较阵列中的每个插入颜色和最后插入的颜色。这是我的代码:
public Color GetUniqueRandomColor(int count){
for(int i = 0; i < count; i++)
{
Color.FromArgb(randomColor.Next(70, 200), randomColor.Next(100, 225), randomColor.Next(100, 230));
}
return Color.Red;}
这是元素在数组中的外观:
颜色[A = 255,R = 132,G = 148,B = 181]
正如您所看到的,我的方法仍然缺少所需的数组和比较新插入颜色的算法。一些帮助和提示将受到关注!
答案 0 :(得分:3)
使用C#3.5
public static Color[] GetUniqueRandomColor(int count)
{
Color[] colors = new Color[count];
HashSet<Color> hs = new HashSet<Color>();
Random randomColor = new Random();
for(int i = 0; i < count; i++)
{
Color color;
while (!hs.Add(color = Color.FromArgb(randomColor.Next(70, 200), randomColor.Next(100, 225), randomColor.Next(100, 230))));
colors[i] = color;
}
return colors;
}
如果你只有C#2.0,你可以用一个字典替换HashSet,其中bool只是一个你不会使用的占位符,但是while表达式会更复杂一些
public static Color[] GetUniqueRandomColor(int count)
{
Color[] colors = new Color[count];
Dictionary<Color, bool> hs = new Dictionary<Color, bool>();
Random randomColor = new Random();
for (int i = 0; i < count; i++)
{
Color color;
while (hs.ContainsKey(color = Color.FromArgb(randomColor.Next(70, 200), randomColor.Next(100, 225), randomColor.Next(100, 230)))) ;
hs.Add(color, true);
colors[i] = color;
}
return colors;
}
答案 1 :(得分:0)
我将填充“使用过的颜色”列表,因此每次在调用Color.FromArgb之前生成新颜色时,您都可以在列表中进行检查。如果颜色存在,您将再次调用随机函数,否则生成颜色并将值添加到列表中。