2016-03-08 32 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