2012-03-30 20 views
0

Ich habe 8 * 16 Ovalformen in einer Form generiert. Der Code ist:Zugriff auf Elemente in einer Liste

for (int i = 0; i < 16; i++) 
{ 
    for (int j = 0; j < 8; j++) 
    { 
     OvalShape ovl = new OvalShape(); 
     ovl.Width = 20; 
     ovl.Height = 20; 
     ovl.FillStyle = FillStyle.Solid; 
     ovl.FillColor = Color.Transparent; 
     ovl.Name = "oval" + j + "" + i; 

     ovl.Location = new Point((ovl.Width * i) * 2, (ovl.Height * j) * 2); 

     ovalShape.Add(ovl); 
    } 
} 

foreach (OvalShape os in ovalShape) 
{ 
    Microsoft.VisualBasic.PowerPacks.ShapeContainer shapeContainer = 
          new Microsoft.VisualBasic.PowerPacks.ShapeContainer(); 
    os.Parent = shapeContainer; 
    this.Controls.Add(shapeContainer); 
} 

Jetzt möchte ich Zugriff auf jede ovalshape anders. Wie könnte ich das tun?

+0

Welcher Typ ist die Variable 'ovalShape'? – Oded

+6

Bitte erklären Sie, was Sie mit "Ich möchte Zugriff auf jede ovalshape anders" –

+0

@Oded: "Liste " Ich würde raten. 'ovalShapes' wäre ein besserer Name gewesen. – markmuetz

Antwort

1

Seit ovalShape ist ein List<OvalShape> Sie den Indexer ein beliebiges Element zugreifen können:

var anOval = ovalShape[0]; 
0

Sie sind bereits jedes Ovalshape in ovalShape anders in Ihrem foreach Schleife Zugriff

foreach (OvalShape os in ovalShape) 
{ 
    //... 
} 

Sie Andernfalls kann auch auf jedes ovalshapes durch seinen Index zugreifen, wie

var newOvalShape = ovalShape[0]; 
0

Sie haben Ihre controle bereits wie ovl.Name = "oval" + j + "" + i benannt;

Also, ich glaube, Sie können dictrionary wie Dictionary<string , OvalShape> dic

Dann erstellen Sie es wie

//... 
ovl.Name = "oval" + j + "" + i; 
dic.add(ovl.Name , ovl); 
//... 

Dann setzen, können Sie dieses Wörterbuch in anderen Methoden zugreifen können und Zugriff auf sie durch ihren Namen.

+0

Ich habe ein neues Wörterbuch hinzugefügt, wie Sie gesagt haben. –

+0

Ich verwende Wörterbuch dic = neues Wörterbuch (); aber was dann? Ich bekomme noch keinen Zugang / –