【问题标题】:how can I generate a Picturebox[] Array by a Code?如何通过代码生成 Picturebox[] 数组?
【发布时间】:2018-02-07 23:19:02
【问题描述】:

我想制作一个程序来混合卡片然后重置它们(就像在开始时一样)。我制作了 52 个 Picturebox,每个都应该是一个 .png 文件。我的程序会通过随机改变每个 Picturebox 的位置来混合卡片。

问题:

我想给每个数组另一个图片框的数据

类似这样的:

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 但也许你知道一种方法并且非常重要:请尝试使用相同的结构。就像可以尽可能少地改变一样

【问题讨论】:

  • 我会重新考虑设计。卡片就是卡片——它们将具有价值、等级、套装和可选的图像。图片框就是您显示任何给定卡片的方式 - 它只能处理这些属性中的一个。而且,每张 牌只需要一张。请阅读How to Ask 并采取tour
  • 您可能正在尝试制作游戏。免责声明:Windows 窗体不适合游戏开发。一个简单的纸牌游戏实际上可能仍然有效。但不能保证。创建 PictureBox 的重要部分实际上是将其添加到表单中。 cards[i]= Picturebox.i 应该看起来像:cards[i]= new Picturebox(); 你可能试图给出像“PictureBox1”、“PictureBox2”等这样的名字。但这是不必要的。你已经有了数组来寻址它们。 Plutonix 在设计上也有一些优点。
  • @Christopher: “Windows Forms 不适合游戏开发” -- 告诉Windows Solitaire
  • 不过,卡片就是卡片(数据),而图片框只是您向用户展示它们的方式。将您的 googler 定位到带有术语 Shuffle 的帖子。 PictureBoxes 不需要洗牌,data 可以。请阅读How to Ask 并采取TOUR
  • 您所要做的就是将List&lt;String&gt;List&lt;Image&gt; 重新分配给固定的静态PB。你正在艰难地做这件事。 UI 控件使可怕程序变量

标签: c# arrays list elements


【解决方案1】:

如果您的要求是创建一个图片框数组,每个图片框都有自己的 PictureBox 对象,您可以使用 LINQ 轻松完成此操作。首先,使用Enumerable.Range 创建一个包含 52 个项目的 IEnumerable(它恰好是整数,尽管没关系),然后使用该枚举来选择新的图片框。将结果转换为数组,然后瞧。

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();

【讨论】:

    猜你喜欢
    • 2010-09-05
    • 2020-06-29
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    • 2011-12-15
    • 1970-01-01
    • 2017-01-07
    相关资源
    最近更新 更多