访问Winform控件的某个实例

时间:2017-07-31 14:04:16

标签: c# winforms visual-studio picturebox visual-c#-express-2010

在这个程序即时编写中,我使用一个函数来创建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个PictureBox,名为" cardBack"使用此功能。我想改变创建的第二个Picture Box的位置,我将如何解决这个问题。

2 个答案:

答案 0 :(得分:4)

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)或者你可以有一个单独的类型集合:List<PictureBox>,你可以在那里另外存储它们

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

并以您希望的方式访问它们。可能是令人感兴趣的订单。

3)另一种可能性是创建一个具有PictureBox类型属性和另一个属性int ID的新类。您可以拥有一个充满这些对象的集合,每个对象可以具有唯一的ID和相应的PictureBox。您仍然可以将图片框放入Controls并根据需要过滤收藏。

答案 1 :(得分:1)

创建一个返回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 [&#34; box1&#34;]。宽度+ = 20;