簡體   English   中英

如何通過代碼生成 Picturebox[] 數組?

[英]how can I generate a Picturebox[] Array by a Code?

我想制作一個混合卡片的程序,然后重置它們(就像開始時一樣)。 我制作了 52 個圖片框,每個圖片框都應該是一個 .png 文件。 我的程序會通過隨機改變每個圖片框的位置來混合卡片。

問題:

我想給每個數組另一個圖片框的數據

像這樣:

PictureBox[] cards = new PictureBox[52];

cards[0] = PictureBox1;
cards[1] = PictureBox2;
cards[2] = PictureBox3;

and so on until it would reach 52.

有沒有辦法讓它自動? 我想也許有一個 for 循環。 類似的東西:

for (int i = 0; i < 53; i++)

  cards[i]= Picturebox.i 

我知道我不能只在 Picturebox 后面寫一個 i 但也許你知道一種方法並且非常重要:請嘗試使用相同的結構。 就像是否有可能盡可能少地改變

如果您的要求是創建一個圖片框數組,每個圖片框都有自己的 PictureBox 對象,則可以使用 LINQ 輕松完成此操作。 首先,使用Enumerable.Range創建一個包含 52 個項目的 IEnumerable(碰巧是整數,雖然無關緊要),然后使用 enumerable 選擇新的圖片框。 將結果轉換為數組,瞧。

PictureBox[] cards = Enumerable.Range(1,52).Select( a => new PictureBox() ).ToArray();

如果每個都需要一個唯一的名稱並添加到某個集合中(例如表單的 Controls 集合),您可以輕松添加該邏輯:

PictureBox[] cards = Enumerable.Range(1,52)
    .Select( a => 
    { 
        var p = new PictureBox(); 
        p.Name = string.Format("PictureBox{0}", a);
        this.Controls.Add(p);
        return p;
    }).ToArray();

如果您決定不創建一組 PictureBox 實例,而是決定只創建一個 PictureBox 和一組其他內容,您仍然可以在大多數其他類型上使用此技術:

public static T[] CreateArray<T>(int size) where T : new()
{
    return Enumerable.Range(1, size).Select( i => new T() ).ToArray();
}

或者特別是對於卡片,您可能想要枚舉花色和等級:

    var suits = new[] {"Spades","Hearts","Diamonds","Clubs"};
    var ranks = new[] {"2","3","4","5","6","7","8","9","10","Jack","Queen","King","Ace" };

    Card[] cards = ranks.SelectMany(
        r =>
        suits.Select( s =>
            new Card { Rank = r, Suit = s }
        )
    ).ToArray();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM