2012-11-01 89 views
2

我无法弄清楚我是否可以执行以下操作:我想使用for循环初始化我的PictureBox数组中的所有值。我也想要分配的值使用循环迭代器。例如:使用for循环初始化数组和变量名C#

 PictureBox[] picUserCards = new PictureBox[6]; 

     for (int i = 0; i < picUserCards.Length; i++) 
     { 
      // Below is similar to what I have done in VBA 
      picUserCards[i] = picCard + (i + 1); 
     } 

正如你可以看到,C#是要扔我一个错误说,皮卡德不会在这方面存在的。但是,在VB/VBA中,它会连接字符给我,给我picUserCards [0] = picCard1。

这可能是一个非常简单的答案,我希望它已经没有被答复几十次了,但是我的前兆搜索没有产生任何东西,除了如何使用For循环来处理数组的索引。

如果很重要,PictureBoxes已经存在(其中12个),所以我想弄清楚如何将它们与数组关联,而不是重新设计我的表单。

编辑:我想有两个数组,解决方案将所有图片框放在窗体上并将它们转储到一个数组中并不能解决我的特定问题。我想能够自己确定有多少对象与给定的数组关联。

回答

2

您可以通过它们的字符串名称引用子控件。如果你的控件嵌套,你将不得不使用Find,这会慢一点(对于非性能密集型应用程序应该可以忽略不计)。

this.Controls.Find("picCard" + 7, true) 
+0

谢谢!我会尽快解决(我和妻子已经从'我编码'转换为'我们监视的东西')。 – armadadrive

+0

不幸的是,picUserCards [i] = this.Controls [“picCard”+(i + 1)];给出以下错误: 错误1不能将类型System.Windows.Forms.Control'隐式转换为'System.Windows.Forms.PictureBox'。一个明确的转换存在(你是否缺少演员?) 智能感知显示我picCard1,picCard2等,所以我认为范围不是一个问题(这意味着我不需要找到) – armadadrive

+0

好'Controls'是只是一个'Control'对象的列表。 'PictureBox'是控件的一个子类,所以如果你想分配结果,你需要做一个明确的转换。像这样:'picUserCards [i] =(PictureBox)this.Controls [“picCard”+(i + 1)];' – ean5533

2

我假设你正在使用具有Controls属性的容器:

this.Controls["picCard" + 7] 

这只适用于直接后裔:

var picUserCards = this.Controls.OfType<PictureBox>().ToArray(); 
+0

为什么有人会为此投票?如果你解释为什么会很好。如果这个假设是正确的,那么这将是有效的,这也是我所解释并将作为解决方案提供的。 – Jmyster

+0

说实话,我不知道,但我会做一些阅读感谢您的建议。当我有机会再次编码时,我会试试你的答案! – armadadrive

+0

如果我没有弄错,这段代码不会把所有的PictureBox都放到同一个数组中吗?最后,我想有两个阵列,picUserCards和picHouseCards。此外,我得到了一个铸造错误(请参阅我在ean5533的答案中的评论),基本上说它不能隐式地将类型Control转换为类型PictureBox。 – armadadrive