2011-03-21 61 views
1

對,在Windows窗體中,我創建了一個包含100個圖片框的網格。點擊一個圖片框後,它會變成綠色,如果再次點擊它將會回到初始顏色。重新使用for循環中的對象名稱?

爲了保存這些我已經把每個圖片框狀態放入一個布爾數組[100]。這些將使用序列化保存在XML中。 (如果綠色則爲true,如果爲白色則爲false(默認))。

加載時我需要使用bool數組並定義每個picturebox的狀態。圖片框的名稱是pictureBox1,pictureBox2,pictureBox3等 有沒有一個方便的方法來做到這一點?

也許你可以這樣更好地瞭解我:

for (int i = 0; i < 100; i++) { 
    if (pictureBoxes[i] == true) //pictureBoxes[] is the bool[] loaded 
    { 
     **pictureBox+i** .BackColor== System.Drawing.Color.LawnGreen; 
    } 
    else if (pictureBoxes[i] == false) 
    { 
     //System.Drawing.Color.White; 
    } 
} 

這個例子不工作;請幫忙?

+3

您不應該使用設計器創建圖片框,而是在表單的構造函數(或Load事件)中使用for循環。然後你可以將它們全部存儲在一個圖片框數組中,並像'pictureBoxControls [i]'一樣訪問它。 – Justin 2011-03-21 18:24:52

+0

爲什麼不使用背景顏色作爲「布爾」?即。 'if(picturebox [i] .BackColor == System.Drawing.Color.LawnGreen){'(請參閱如何實際獲取對象的答案。) – 2011-03-21 18:29:59

回答

-1

Controls.Find()

這種方式實際上是比其他人更安全,因爲我相信,如果控制不存在,不是一個錯誤將被拋出。此方法檢查,以確保在表格上存在控制:

var controls = this.Controls.Find("pictureBox"+i, true); 
if (controls.Length > 0) 
{ 
    foreach (var control in controls) 
    { 
     control.BackColor = Color.LawnGreen; 
    } 
} 
+3

我希望您計劃詳細說明。 – 2011-03-21 18:27:19

+1

這是關聯的,不需要詳細說明,對吧?鏈接的頁面解釋了它。 – 2011-03-21 18:29:01

+0

@Josh M. - 如果所有的OP都想要一個鏈接,他們可以去谷歌。 StackOverflow最大的好處之一是它可以讓你徹底和完全地回答一個特定的問題。在我看來,發佈單一鏈接既懶惰又違背了我們在SO上嘗試做的事情。另外,舉例來說,如果微軟明天將此頁面移動到另一個網址,並且其他人正試圖找到相同問題的答案。這個答案絕對沒有幫助。所有它需要解決它是:嘗試'Controls.Find(「pictureBox」+我).BackColor = Color.LawnGreen;' – 2011-03-21 18:51:30

4

好了,直接回答你的問題是在對圖像 - 母公司控制的Controls財產(一ControlCollection)使用indexer by name框。

假設你的代碼是在父(可能的形式)的實例方法運行時,你可以這樣做:

// Cast to PictureBox if you need to set a picture-box-specific property. 
Controls["pictureBox" + i].BackColor = Color.LawnGreen; 

更一般地,你可以這樣做:

parentControl.Controls["pictureBox" + i].BackColor = Color.LawnGreen; 

但如何你是否遇到過奇怪的情況,你有一組bools,每個成員都通過一些命名約定與特定的圖片框相關聯?如果通過設計師手動將100個圖片框拖到表單上,您可能會給自己一個不必要的頭痛。有可能這樣設計得更好;有了更多的信息,我們可能能夠爲您提供更清潔的解決方案。

+0

感謝您的回覆。我仍然是C#的初學者。我試圖製作電影院系統,用戶可以選擇座位。座位以圖片框表示..如果拍攝它將變成綠色,如果不是白色的話。 是的,我沒有手動拖動100個文本框。 – 2011-03-21 18:48:16

+0

@ user669910:乾杯。賈斯汀的評論是一個很好的起點。 :) – Ani 2011-03-21 18:57:15

+0

當'Controls [「pictureBox」+ i]'不存在時會發生什麼?它不會拋出一個錯誤? – Martin 2011-03-21 19:06:38

0

只是一個建議,不知道這是否有助於(甚至工作) 創建從圖片框類派生的新類,並通過添加布爾變量擴展。並在構造函數中傳遞boolean作爲參數並根據它改變背景顏色。 並且不要忘記將這個新類標記爲[Serializable]