2010-01-23 39 views
1

很难理解类以及为什么我无法访问某个对象。 如何修改代码,以便在所有类/事件中更改“地图”(这是一组标签)属性?C#在公共类中从表单按钮单击更改标签创建

的方法Draw2D的()创建一对夫妇,我希望改变在不同的事件(按一下按钮在这个例子中)在主窗体上的标签。

有人可以帮助我,或只是暗示我走向正确的方向。

验证码:

公共部分Form1类:表格

{ 
    public void Draw2d() 
    { 
     const int spacing = 20; 
     Label[][] map = new Label[5][]; 
     for (int x = 0; x < 5; x++) 
     { 
      map[x] = new Label[5]; 
      for (int y = 0; y < 5; y++) 
      { 
       map[x][y] = new Label(); 
       map[x][y].AutoSize = true; 
       map[x][y].Location = new System.Drawing.Point(x * spacing, y * spacing); 
       map[x][y].Name = "map" + x.ToString() + "," + y.ToString(); 
       map[x][y].Size = new System.Drawing.Size(spacing, spacing); 
       map[x][y].TabIndex = 0; 
       map[x][y].Text = "0"; 
      } 
      this.Controls.AddRange(map[x]); 
     } 
    } 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    public void Form1_Load(object sender, EventArgs e) 
    { 
     Draw2d(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     map[0][0].Text = "1";    //  <-- Doesn't work 
    } 


} 

谢谢!

+0

当你说它不起作用时会发生什么? – Spence 2010-01-23 23:12:07

+0

您可以创建一个新的按钮,它读取地图[0] [0]属性并将其放在消息框中。您可以看到该属性是否被覆盖或者是否显示不正确? – Spence 2010-01-23 23:12:54

回答

1

我猜测是你添加了

public Label[][] map; 

却忘了在Draw2D的第二线从

Label[][] map = new Label[5][]; 

改变

map = new Label[5][]; 

我只是想你的代码,如果你改变这两条线正常工作。如果这不是问题,请说明你得到了什么错误?

+0

马特:谢谢,它的工作。这是我的错误。再次感谢!你救了我很多麻烦:) – Qrew 2010-01-23 23:32:22

2

必须声明地图物业(全球为class)

public partial class Form1 : Form { 
    public Label[][] map; 
    .... 
} 

,那么你可以在里面类使用像

this->map[...][...] 

或从外面像

objClass->map[...][...] 
+0

公共标签为Visual Studio做了诀窍,但我仍然无法弄清楚如何访问变量数组map [] []。 map [1] [1] .Text =“1”;编译但不工作。 objClass-> map [] []?我不明白, – Qrew 2010-01-23 23:09:14