如何制作随机按钮背景颜色生成器?

问题描述:

我试图让我的开始按钮在图片顶部标记的所有4个框中生成一个颜色。颜色不应该是一样的。它应该像乐透一样工作,但用颜色代替数字。任何人都可以告诉我我的代码有什么问题吗?如何制作随机按钮背景颜色生成器?

Picture

而这就是我的代码;

 } 

     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; 

     } 


    } 
} 
+1

我没有看到你在任何地方设置按钮的背景。 –

+0

'Color RandomColor = GetRandomColor();' - >'yourButton.BackColor = GetRandomColor(); yourButton.Refresh();' – TaW

+0

是那里的计时器,因为你希望它每次计时器都会改变? –

回答你的问题是类似的东西:

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]; 
}