如何制作随机按钮背景颜色生成器?
问题描述:
我试图让我的开始按钮在图片顶部标记的所有4个框中生成一个颜色。颜色不应该是一样的。它应该像乐透一样工作,但用颜色代替数字。任何人都可以告诉我我的代码有什么问题吗?如何制作随机按钮背景颜色生成器?
而这就是我的代码;
}
private void buttonStart_Click(object sender, EventArgs e)
{
buttontest.BackColor = GetRandomColor();
timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
Color RandomColor = GetRandomColor();
buttontest.BackColor = GetRandomColor();
buttontest.Refresh();
}
private Random random;
private void MainForm_Load(object sender, EventArgs e)
{
//Create a new instance of the random class
random = new Random();
}
private Color GetRandomColor()
{
return Color.FromArgb(random.Next(0, 255), random.Next(0, 255), random.Next(0, 255));
}
private void buttontest_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
buttontest.BackColor = Color.Red;
}
}
}
答
回答你的问题是类似的东西:
Random random = new Random();
private Color GetRandomColor()
{
return Color.FromArgb(random.Next(0, 255), random.Next(0, 255), random.Next(0, 255));
}
private void btnStart_Click(object sender, EventArgs e)
{
button1.BackColor = GetRandomColor();
button2.BackColor = GetRandomColor();
button3.BackColor = GetRandomColor();
button4.BackColor = GetRandomColor();
}
但是我知道这场比赛主谋你想拥有一组特定的颜色。那么代码应该是类似的东西:
List<Color> possibleColors = new List<Color>()
{
Color.Red,
Color.Green,
Color.Gold,
Color.Blue
};
private Color GetRandomColorOfList()
{
return possibleColors[random.Next(0, possibleColors.Count)];
}
private void button5_Click(object sender, EventArgs e)
{
button1.BackColor = GetRandomColorOfList();
button2.BackColor = GetRandomColorOfList();
button3.BackColor = GetRandomColorOfList();
button4.BackColor = GetRandomColorOfList();
}
+0
原来的问题有一个限制:'颜色不应该是相同的'。 –
答
您可以使用上述迈克尔·赛德尔建议列表,将它洗用的就是点击Start
按钮时,例如,费雪耶茨算法来实现here。
private static Random rng = new Random();
public static void Shuffle<T>(this IList<T> list)
{
int n = list.Count;
while (n > 1) {
n--;
int k = rng.Next(n + 1);
T value = list[k];
list[k] = list[n];
list[n] = value;
}
}
List<Color> possibleColors = new List<Color>()
{
Color.Red,
Color.Green,
Color.Gold,
Color.Blue
};
private void button5_Click(object sender, EventArgs e)
{
possibleColors.Shuffle();
button1.BackColor = possibleColors[0];
button2.BackColor = possibleColors[1];
button3.BackColor = possibleColors[2];
button4.BackColor = possibleColors[3];
}
我没有看到你在任何地方设置按钮的背景。 –
'Color RandomColor = GetRandomColor();' - >'yourButton.BackColor = GetRandomColor(); yourButton.Refresh();' – TaW
是那里的计时器,因为你希望它每次计时器都会改变? –