在这个程序即时编写中,我使用一个函数来创建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的位置,我将如何解决这个问题。
答案 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;