2015-11-25 79 views
0

我正在試圖製作一個簡單的使用10x10空白圖片框的網格遊戲,並且遇到了一個非常特殊的問題。在Visual Studio(c#)中使用變量替換名稱背景色使用變量替換名稱

想法是,應用程序根據玩家輸入進行計算並更改網格中特定圖片框的背景顏色。儘管這個問題對於這個問題來說確實不重要。

這個pictureboxes被命名爲pictureBox1, pictureBox2, etc.(一直到100)。

我知道,我可以用這行代碼改變背景色:

pictureBox1.BackColor = Color.FromArgb(int, int, int); 

現在讓我們假設應用程序返回的變量int resultValue = 25,這意味着我要pictureBox25改變其Backcolor。 現在,如果我可以只寫這樣的代碼:

string pbName = "pictureBox" + resultValue.toString(); 

pbName.BackColor = Color.FromArgb(int, int, int); 

...那麼就不會有問題。但Visual Studio似乎並不接受字符串可替代名稱。

是否有任何類型的變量可以接受,或者有另一種方法可以實現我所需要的而不訴諸巨大的if語句。

+2

請參閱http://stackoverflow.com/questions/1536739/get-a-windows-forms-control-by-name-in-c-sharp按名稱查找控件。 – WraithNath

+1

此外,這可能是製作這樣一款遊戲的最低效方式。你應該自己繪製網格,比使用PictureBox控件更容易,更快速... –

+0

如果堅持基本設計,你應該在設置時將引用映射到2d數組中。使用DataGridView會更簡單。 – TaW

回答

0
Control []controls=this.Controls.Find("pictureBox" + resultValue.ToString(), true); 
     if (controls != null && controls.Length > 0) 
     { 
      foreach (Control control in controls) 
      { 
       if (control.GetType() == typeof(PictureBox)) 
       { 
        PictureBox pictureBox = control as PictureBox; 
        pictureBox.BackColor = Color.FromArgb(r, g, b); 
       } 
      } 
     }