[英]How can I generate a different image in a Visual Studio picturebox depending on a listbox?
[英]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.