访问 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;
在我编写的这个程序中,我使用一个函数来创建 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;