2017-05-22 2 views
0

Ich habe ein multidimensionales Array, durch das ich gehe ... das funktioniert so, wie ich es will. Aber ich möchte die Position verwenden, um den Text des Panels, das ich erstellt habe (Windows Form) zu ändern. Beispiel: Ich habe die Position [0, 9] und da steht ein 'M' (char) und jetzt möchte ich dieses M als Text des Panel p009 schreiben. So:mehrdimensionale Array-Position als Objektname in C#

if (gameView[j,i] == 'M') 
        { 
         //p + j + 0 + i.Text = 'M'; 
        } 
+1

Sie haben also 90 Variablen des Typs Panel in Ihrem Formular? Sehr schlechte Idee. Warum nicht ein mehrdimensionales Array von Typ-Panel erstellen und 'p [0,9]' stattdessen verwenden? – HimBromBeere

Antwort

1

Wenn Ihr Panel s auf Klassenebene deklariert werden, könnten Sie Reflexion verwenden, sie zu erhalten:

// Get the type handle of a specified class. 
Type myType = typeof(Form1); 

// Get the fields of the specified class. 
FieldInfo[] myField = myType.GetFields(); 

FieldInfo theRightField = myField 
    .Where(f => f.Name.Equals(
     String.Format("p{0}{1:u2}", j, i) 
    )).First(); 

Panel p = (Panel)theRightField.GetValue(this); 

Aber wie in den Kommentaren eine weit bessere Lösung wäre, erwähnt zu erklären ein zweites Array, um sie zu halten:

Panel[,] myPanels = new Panel[10,10]; 
for (int j = 0; j < 10; j++) 
{ 
    for (int i = 0; i < 10; i++) 
    { 
     myPanels[j,i] = new Panel(); 
    } 
} 
+0

Also muss ich die Form1.Designer.cs-Datei selbst schreiben, oder? (nur der Teil für mein Panel) –

+0

@SimonB Nein. Sie ändern die Designer-Datei niemals selbst. Sie instanziieren diese Bereiche im Konstruktor von Form1 nach dem Aufruf der Designer-Methode. – Kempeth