2010-01-23 15 views
1

Avoir du mal à comprendre les classes et pourquoi je ne peux pas accéder à certains objets. Comment puis-je modifier le code pour pouvoir modifier les propriétés "map" (c'est-à-dire un tas d'étiquettes) dans toutes mes classes/événements?C# modifier les étiquettes créées en classe publique à partir du bouton de formulaire cliquer

La méthode Draw2d() crée un couple d'étiquettes sur le formulaire principal que je souhaite modifier sur différents événements (cliquez sur le bouton dans cet exemple). Est-ce que quelqu'un peut m'aider, ou simplement me faire signe dans la bonne direction?

Le code:

public partial class Form1: Formulaire

{ 
    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 
    } 


} 

Merci!

+0

Lorsque vous dites que cela ne fonctionne pas, que se passe-t-il? – Spence

+0

Pourriez-vous créer un nouveau bouton qui lit la propriété map [0] [0] et le place dans une boîte de message. Vous pouvez voir si la propriété est écrasée ou si elle n'est pas affichée correctement? – Spence

Répondre

1

Mon suppose que vous avez ajouté

public Label[][] map; 

mais a oublié de changer la deuxième ligne de Draw2d de

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

à

map = new Label[5][]; 

Je viens d'essayer votre code, et il fonctionne très bien si vous changez ces deux lignes. Si ce n'est pas le problème, pourriez-vous dire quelle erreur vous obtenez, s'il vous plaît?

+0

Matt: Merci, ça marche. C'était mon erreur. Merci encore! Vous m'avez sauvé beaucoup d'ennuis :) – Qrew

2

vous devez déclarer la carte en tant que propriété (global classe)

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

vous pouvez alors utiliser à l'intérieur classe comme

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

ou de l'extérieur comme

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

L'étiquette publique a fait l'affaire pour Visual Studio, mais je n'arrive toujours pas à comprendre comment accéder à la variable array map [] []. carte [1] [1] .Texte = "1"; compile mais ne fonctionne pas. objClass-> carte [] []? Je ne comprends pas ça – Qrew