访问 Winform 控件的特定实例

Accessing certain instance of a Winform control

在我编写的这个程序中,我使用一个函数来创建 PictureBox 的多个实例。这是代码:

public void serverCard()
{
    //Definitions
    PictureBox cardBack = new PictureBox();

    //Specifics for card
    cardBack.Size = new Size(cardSizeX, cardSizeY);
    cardBack.BackColor = Color.White;
    cardBack.Left = startX;
    cardBack.Top = startY;

    serverArea.Controls.Add(cardBack);

    //differences in pos
    startX += cardBack.Width + 5;
    if (startX > this.Width - cardSizeX)
    {
      startY += cardBack.Height + 5;
      startX = 5;
    }
}

我将如何访问 PictureBox 的特定实例。 例如:我使用此函数创建了 5 个名为 "cardBack" 的图片框。我想改变创建的第二个图片框的位置,我该怎么办。

1) 你可以给每个 PictureBox 一个不同的名字(可能是 "cardBack" + ID_in_int

int picBox_ID = 1;
public void serverCard()
{
    PictureBox cardBack = new PictureBox();
    cardBack.Name = "cardBack" + picBox_ID;
    picBox_ID++;

并按名称将它们从 Controls 中拉出:

PictureBox temp = serverArea.Controls.OfType<PictureBox>().FirstOrDefault(x=>x.Name == "cardBack2");

2) 或者您可以有一个单独的 collection 类型:List<PictureBox> 您可以在其中额外存储它们

List<PictureBox> picCollection = new List<PictureBox>();
public void serverCard()
{
    PictureBox cardBack = new PictureBox();
    picCollection.Add(cardBack);

并以您想要的方式访问它们。可能是您感兴趣的订单。

3) 另一种可能性是创建一个新的 class,它有一个类型为 PictureBox 的 属性 和另一个 属性 int ID。您可以用这些 object 填充一个 collection,每个 object 可以有一个唯一的 ID 和相应的 PictureBox。您仍然可以将图片框放入 Controls 并根据需要过滤 collection。

创建一个方法 return PictureBox

的实例
public PictureBox CreatePictureBox ()
{
  // your code from question here
}

然后在您的表单中定义一个字段

private Dictionary<string, PictureBox> pboxes = new Dictionary<string, PictureBox>();

任何时候你想创建一个新的 PictureBox 把它放在 pboxes 集合中:

pboxes.Add("box1", CreatePictureBox());    

现在您可以像这样访问您的盒子:

pboxes["box1"].宽度 += 20;