2016-03-08 29 views
0

對於一個學校任務,我們使用C#製作國際象棋遊戲,其中我們必須學會以面向對象的方式工作。該板在嵌套開出了2D圖片框陣列的for循環從標籤中的對象獲取屬性

//Create the Board Pattern out of PictureBoxes 
     #region Checkerboard 

     PictureBox[,] Vak = new PictureBox[8, 8]; 

     for (int i = 0; i < 8; i++) 
     { 
      for (int x = 0; x < 8; x++) 
      { 

       Vak[i, x] = new PictureBox(); 
       Vak[i, x].Name = String.Format("{0},{1}", i, x); 
       Vak[i, x].Width = 50; 
       Vak[i, x].Height = 50; 
       Vak[i, x].Location = new Point(xpos, ypos); 
       Vak[i, x].SizeMode = PictureBoxSizeMode.Zoom; 
       Vak[i, x].Click += Chess_Click; 
       if ((i + x) % 2 == 0) 
       { 
        Vak[i, x].BackColor = ColorTranslator.FromHtml("#e5e5e5"); //white ColorTranslator.FromHtml("#e5e5e5"); 
       } 
       else 
       { 
        Vak[i, x].BackColor = ColorTranslator.FromHtml("#545454"); //black ColorTranslator.FromHtml("#545454"); 

       } 
       xpos += 50; 
       this.Controls.Add(Vak[i, x]); 
      } 
      xpos = 50; 
      ypos += 50; 
      this.Controls.Add(border); 
     } 
     #endregion 

在其他職位我發現我可以指一類(通過PictureBox的)使用.TAG屬性像這樣:

Vak[i,x].Tag = new Tower(); 

但是,我不能想出一個辦法,從withing標籤

說出塔類有一個「名稱」屬性調用從塔類的屬性,我怎麼會去調用該

string objectname = Vak[i,x].Tag.(name?) 

對不起,如果這是一個愚蠢的問題,但我對編程非常陌生。 謝謝!

+1

如果您知道在「標籤」屬性中存儲的對象的類型,則需要將其明確轉換爲該類型以訪問其屬性。像'((Tower)(Vak [i,x]))。Name'。 – dotNET

+3

我建議不要使用'Tag'屬性,而是用picturebox和chesspiece成員創建自己的結構。 – wimh

+0

@Wimmel我該怎麼做呢? –

回答

5

你要投它,因爲標籤是Object類型:

Tower tower = Vak[i,x].Tag as Tower; 

if(tower!=null) 
{ 
    //do stuff 
} 

不過,我會避免存放在這樣的標籤屬性的數據結構。

+1

如果它不是'塔'呢? – wimh

+0

好點 - 我修改了我的答案 – auburg