2012-11-01 77 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