将5张随机卡添加到列表框,列表框显示相同的卡片

时间:2017-10-10 14:43:40

标签: c# listbox

我的Windows窗体上有一个按钮,可以在我的列表中添加五张随机卡片。 随机卡显示在列表框中。 当我第一次按下按钮时,列表框会显示5张随机卡片。 当我再次按下按钮时,列表框现在显示相同的5张随机卡3次。 而不是10张随机卡。 反正有没有摆脱这个问题?

 private void RandomButton_Click(object sender, EventArgs e)
    {
        Random random = new Random();
        for (int i = 0; i < 5; i = i + 1)
            fiveRandomCards.Add(new Card((Symbool)random.Next(1, 4), (Waarde)random.Next(1, 14)));
        foreach (Card card in fiveRandomCards)
            CardsLB.Items.Add(card.name);                
    }

2 个答案:

答案 0 :(得分:0)

我实际上喜欢这种方法 for small collections

linq: order by random

伪代码

ICollection<int> coll = new List<int>() {1,2,3,4,5,6,7,8,9,10,11,12,13,14};
ICollection<int> randomFiveItems = coll.OrderBy(x => Guid.NewGuid()).Take(5);

然后绑定执行控制的randomFiveItems

KaartenLB.DataSource = randomFiveItems;

Klarfürmich

答案 1 :(得分:0)

我找到了解决问题的方法,很简单。 我的程序中有2个列表: 第一个列表是“deck”,它已经拥有52张卡,这些卡是在我的Form1_load方法中生成的。 第二个列表是“fiveRandomCards”。 在我的窗体上我有一个按钮。 当我点击这个按钮时,它会从我的套牌列表中添加5张radom卡到fiveRandomCards列表。 我在列表框中添加了clear()方法,因此列表框中的项目不会堆叠。

请记住,在我的Card类中,我使用2个枚举:符号 - &gt;钻石,俱乐部,心和黑桃。                                                 价值 - &gt;从1到13。

public partial class Form1 : Form
{
    List<Card> deck = new List<Card>(); //allready has 52 cards in it.
    List<Card> fiveRandomCards = new List<Card>(); 
    Random random = new Random();

    private void Form1_Load(object sender, EventArgs e)
        {
            for (int symbol = 1; symbol < 5; symbol = symbol + 1)
            {
                for (int value = 1; value < 14; value = value + 1)
                    deck.Add(new Card((Symbol)symbol, (Value)value));
            }
        }
    private void RandomButton_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < 5; i = i + 1)
            fiveRandomCards.Add(deck[random.Next(0, deck.Count)]); 
        CardsLB.Items.Clear();
        foreach (Card card in fiveRandomCards)
            CardsLB.Items.Add(card.name);                
    }
}