C# 如何保持我所有的按钮。背景颜色与其他不同

C# 如何保持我所有的按钮。背景颜色与其他不同,c#,C#,我不希望一种颜色用简单的文字显示两次:我不希望2个或更多的按钮具有相同的背景色(红色、红色、黄色、蓝色)或(红色、红色、蓝色、蓝色)等等。。它们都必须像这里一样不同:(黄色、蓝色、红色、紫色),这基本上意味着每种颜色可以显示一次 我使用以下颜色 紫红色橙黄色蓝绿色 } } 随机=新随机(); 列表可能颜色=新列表() { 颜色,红色, 颜色,绿色, 颜色,橙色, 颜色,蓝色, 颜色,紫色, 颜色,黄色, }; 私有无效按钮5_单击(对象发送者,事件参数e) { button1.BackColo

我不希望一种颜色用简单的文字显示两次:我不希望2个或更多的按钮具有相同的背景色(红色红色、黄色、蓝色)或(红色、红色、蓝色、蓝色)等等。。它们都必须像这里一样不同:(黄色、蓝色、红色、紫色),这基本上意味着每种颜色可以显示一次

我使用以下颜色

紫红色橙黄色蓝绿色

}
}
随机=新随机();
列表可能颜色=新列表()
{
颜色,红色,
颜色,绿色,
颜色,橙色,
颜色,蓝色,
颜色,紫色,
颜色,黄色,
};
私有无效按钮5_单击(对象发送者,事件参数e)
{
button1.BackColor=getRandomColorOfList();
button2.BackColor=getrandomColorOfList();
button3.BackColor=getRandomColorOfList();
button4.BackColor=GetRandomColorOfList();
按钮1.可见=假;
按钮2.可见=假;
按钮3.可见=假;
按钮4.可见=假;
}
私有颜色GetRandomColorOfList()
{
返回可能颜色[random.Next(0,可能颜色计数)];
}

您可以为
IList

编辑


Shuffle实现来自:

仍然有一些事情不清楚,但您可以按照以下方式执行:

创建一个颜色数组

执行button1.BackColor=GetRandomColorOfList()时

将颜色添加到该数组,例如ColorArray

在GetRandomColorOfList()函数中执行以下操作:

Color TempColor;
do{
TempColor=possibleColors[random.Next(0, possibleColors.Count)];
}While(ColorArray.Contains(TempColor));
return TempColor;

做一个if语句,比如

button1.BackColor = GetRandomColorOfLoist();
var temp = GetRandomColorOfLoist();
if(!button1.backColor == temp)
{
button2.BackColor = temp;
}

一些循环重复这个过程直到它进入循环

GetRandomColorOfList
需要知道已经使用的颜色。一种可能是从列表中删除所选颜色(您需要一种方法来重置列表)

List\u default=newlist{Color.Red,Color.Blue,…};
列出颜色;
Random _rnd=新的Random();
void ResetRandomColor()=>_colors=_default.ToList();//复制
颜色GetRandomColorOfList()
{
如果(_colors==null ||_colors.Count==0)
抛出新的InvalidOperationException();
var index=\u rnd.Next(0,\u colors.Count);
尝试{返回_颜色[索引];}
最后{u colors.RemoveAt(index);}
}
用法:

ResetRandomColor();
new List<Button> { button1, button2, button3, button4 }.
    ForEach(o => o.BackColor = GetRandomColorOfLoist());
ResetRandomColor();
新列表{button1,button2,button3,button4}。
ForEach(o=>o.BackColor=getrandomColorOfList());

所以我从两个方面理解您的问题:第一,您希望每个按钮都有唯一的颜色。以下解决方案将为您提供该结果:

    private List<Color> selectedColors;

    private Color GetRandomColorOfLoist(Boolean newGame)
    {
        Color possibleColor;
        if (newGame)
        {
            selectedColors.Clear();
        }
        possibleColor = possibleColors[random.Next(0, possibleColors.Count)];
        while (selectedColors.Contains(possibleColor))
        {
            possibleColor = possibleColors[random.Next(0, possibleColors.Count)];

        }
        selectedColors.Add(possibleColor);
        return possibleColor;


    }
    private Color GetRandomColorOfLoist(int index)
    {
        Color possibleColor;
        if (selectedColors.Count < 4)
        {
            possibleColor = possibleColors[random.Next(0, possibleColors.Count)];
            selectedColors.Add(possibleColor);
            return possibleColor;
        }
        possibleColor = possibleColors[random.Next(0, possibleColors.Count)];
        while (possibleColor == selectedColors[index])
        {
            possibleColor = possibleColors[random.Next(0, possibleColors.Count)];
        }

        selectedColors[index] = possibleColor;

        return possibleColor;


    }
private List selectedColors;
私有颜色GetRandomColorOfList(布尔新游戏)
{
颜色可能的颜色;
如果(新游戏)
{
selectedColors.Clear();
}
possibleColor=possibleColors[random.Next(0,possibleColors.Count)];
while(selectedColors.Contains(可能的颜色))
{
possibleColor=possibleColors[random.Next(0,possibleColors.Count)];
}
选择颜色。添加(可能的颜色);
返回可能的颜色;
}
第二,您希望按钮不具有以前选择的颜色此解决方案将为您提供该结果:

    private List<Color> selectedColors;

    private Color GetRandomColorOfLoist(Boolean newGame)
    {
        Color possibleColor;
        if (newGame)
        {
            selectedColors.Clear();
        }
        possibleColor = possibleColors[random.Next(0, possibleColors.Count)];
        while (selectedColors.Contains(possibleColor))
        {
            possibleColor = possibleColors[random.Next(0, possibleColors.Count)];

        }
        selectedColors.Add(possibleColor);
        return possibleColor;


    }
    private Color GetRandomColorOfLoist(int index)
    {
        Color possibleColor;
        if (selectedColors.Count < 4)
        {
            possibleColor = possibleColors[random.Next(0, possibleColors.Count)];
            selectedColors.Add(possibleColor);
            return possibleColor;
        }
        possibleColor = possibleColors[random.Next(0, possibleColors.Count)];
        while (possibleColor == selectedColors[index])
        {
            possibleColor = possibleColors[random.Next(0, possibleColors.Count)];
        }

        selectedColors[index] = possibleColor;

        return possibleColor;


    }
私有颜色GetRandomColorOfList(int索引)
{
颜色可能的颜色;
if(selectedColors.Count<4)
{
possibleColor=possibleColors[random.Next(0,possibleColors.Count)];
选择颜色。添加(可能的颜色);
返回可能的颜色;
}
possibleColor=possibleColors[random.Next(0,possibleColors.Count)];
while(可能颜色==selectedColors[index])
{
possibleColor=possibleColors[random.Next(0,possibleColors.Count)];
}
SelectedColor[索引]=可能的颜色;
返回可能的颜色;
}

我不希望一种颜色用简单的话显示两次:我不希望框中有两种相同的颜色,例如(红色、红色、黄色、蓝色)或(红色、红色、蓝色、蓝色)等等。。它们都必须像这里一样不同:(黄色、蓝色、红色、紫色),这基本上意味着每种颜色可以显示一次

我使用以下颜色


紫色-红色-橙色-黄色-蓝色-绿色

GetRandomColorOfList()中的内容我已经编辑了这篇文章,你可以在那里看到它。你可以洗牌列表,然后取第一个4如果你想剽窃我在评论中添加的链接中的代码,你至少可以给予适当的信任。我没有看到你的评论抱歉,我更新我的答案。
    private List<Color> selectedColors;

    private Color GetRandomColorOfLoist(Boolean newGame)
    {
        Color possibleColor;
        if (newGame)
        {
            selectedColors.Clear();
        }
        possibleColor = possibleColors[random.Next(0, possibleColors.Count)];
        while (selectedColors.Contains(possibleColor))
        {
            possibleColor = possibleColors[random.Next(0, possibleColors.Count)];

        }
        selectedColors.Add(possibleColor);
        return possibleColor;


    }
    private Color GetRandomColorOfLoist(int index)
    {
        Color possibleColor;
        if (selectedColors.Count < 4)
        {
            possibleColor = possibleColors[random.Next(0, possibleColors.Count)];
            selectedColors.Add(possibleColor);
            return possibleColor;
        }
        possibleColor = possibleColors[random.Next(0, possibleColors.Count)];
        while (possibleColor == selectedColors[index])
        {
            possibleColor = possibleColors[random.Next(0, possibleColors.Count)];
        }

        selectedColors[index] = possibleColor;

        return possibleColor;


    }