我想更改随机按钮。 但问题是我想用随机数量的变色来做到这一点。
现在我正在改变它,但我想动态改变颜色的变化数量。
private void ChangeColor()
{
Random rand = new Random();
Color[] colors = new Color[]
{
Colors.Red,
Colors.Blue,
Colors.Green,
};
But0_1.Background = new SolidColorBrush(colors[rand.Next(0, 3)]);
But0_1.Background = new SolidColorBrush(colors[rand.Next(0, 3)]);
But0_2.Background = new SolidColorBrush(colors[rand.Next(0, 3)]);
But0_3.Background = new SolidColorBrush(colors[rand.Next(0, 3)]);
But0_4.Background = new SolidColorBrush(colors[rand.Next(0, 3)]);
But0_5.Background = new SolidColorBrush(colors[rand.Next(0, 3)]);
But0_6.Background = new SolidColorBrush(colors[rand.Next(0, 3)]);
But0_7.Background = new SolidColorBrush(colors[rand.Next(0, 3)]);
}
答案 0 :(得分:1)
您可以执行以下操作:
private Random _random;
public MainWindow()
{
InitializeComponent();
_random = new Random();
}
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
var buttons = GetButtonsToChange();
foreach (var button in buttons)
{
if (button != null)
{
button.Background = CreateColor();
}
}
}
private Button[] GetButtonsToChange()
{
var amountOfButtons = RandBetween(0, 5);// <== 0 for none 5 because i only have 4 buttons and RandBetween is less than
var listOfIndexs = new List<ButtonNumbering>();
var listOfButtons = new List<Button>();
for (int i = 1; i <= amountOfButtons; i++)
{
var buttonItem = new ButtonNumbering(i,RandBetween(1,4));
var alreadyHasButton = listOfIndexs.Select(x => x.Number).Contains(buttonItem.Number);
if (alreadyHasButton)
{
while (alreadyHasButton)
{
var newRandomNumber = RandBetween(1, 5);
buttonItem.Number = RandBetween();
alreadyHasButton = listOfIndexs.Select(x => x.Number).Contains(buttonItem.Number);
}
}
listOfIndexs.Add(buttonItem);
var buttonName = $"Button{buttonItem.Number}";//<= the names of the buttons are Button1 Button2 Button3 Button4
var button = (Button)FindName(buttonName);
listOfButtons.Add(button);
}
return listOfButtons.ToArray();
}
private SolidColorBrush CreateColor(int bottom=0, int top=255)
{
var red = RandBetween(bottom,top);
var green = RandBetween(bottom,top);
var blue = RandBetween(bottom,top);
return new SolidColorBrush(Color.FromRgb(red,green,blue));
}
private byte RandBetween(int bottom=0, int top=255)
{
var randomNumber = Convert.ToByte(_random.Next(bottom, top));
return randomNumber;
}
我已经更新了答案,因为它为所有人创建了相同的颜色。
答案 1 :(得分:0)
我无法发表评论,但3xGuy提供的RandomInt()方法总是会产生随机颜色的灰色,因为所有3个字节都是相同的。这基本上与此处描述的问题相同: Random number in a loop
将Random实例设为LocalColor的局部实例,并删除RandomInt()方法:
private static SolidColorBrush CreateColor()
{
var random = new Random();
var r = Convert.ToByte(random.Next(0, 255));
var g = Convert.ToByte(random.Next(0, 255));
var b = Convert.ToByte(random.Next(0, 255));
return new SolidColorBrush(Color.FromRgb(r, g, b));
}