2010-12-30 14 views
2

Es gibt String-Array enthält einige Dateiposition.Erstellen Sie die Steuerung in foreach-Schleife?

Ich benutze eine foreach-Schleife, in der jede Schleife ich ein neues Radio-Button-Steuerelement erstellen möchte. ohne foreach Code führt, aber in Schleife nur ein Steuerelement wird hinzugefügt.

Kann mir jemand sagen warum? und wie ich das mache.

Code:

string[] location = 
{ 
    @"C:\Program Files\Skype\Phone\Skype.exe", 
    @"C:\Program Files\iTunes\iTunes.exe", 
    @"C:\Program Files\Internet Explorer\iexplore.exe" 
}; 

int i = 10; 
foreach (string path in location) 
{ 
    if (File.Exists(path)) 
    { 
     RadioButton rbList = new RadioButton(); 
     rbList.AutoSize = false; 
     Icon icn; 
     icn = Icon.ExtractAssociatedIcon(path); 
     rbList.Image = icn.ToBitmap(); 
     rbList.Height = 100; 
     rbList.Width = 50; 
     i = i + 30; 
     rbList.Location = new Point(100, i); 

     groupBox1.Controls.Add(rbList); 
    } 
} 
+0

Nur ein Vorschlag: Sie möchten möglicherweise die Methoden SuspendLayout und ResumeLayout vor und nach dem Hinzufügen der Steuerelemente aufrufen, wenn Sie es nicht bereits tun. http://StackOverflow.com/Questions/3838315/c-why-use-suspendlayout –

Antwort

2

Sie legen die Höhe auf 100, aber die Position nur um 30 zu erhöhen.

rbList.Height = 100; 
... 
i = i + 30; 
rbList.Location = new Point(100, i); 

Sie können die Höhe unter 30 verringern:

rbList.Height = 30; //or smaller 

oder

erhöhen das "i" mehr als 100:

i = i + 100; //or more than 100 
rbList.Location = new Point(100, i); 
+0

Danke Kumpel, ich habe meine Schuld. Ich muss meine Mathematik verbessern – PawanS

0

hinzufügen

rbList.AutoSize = true; 

Und achten Sie darauf, dass Ihre groupBox1 groß genug ist, um alle Ihre Radiobuttons anzuzeigen.

0

Ein wenig Änderungen:

i = i + 100; 
rbList.Location = new Point(100, i); 

groupBox1.Controls.Add(rbList); 

int space = 10; 
groupBox1.Height += rbList.Height + space; 

Diese Arbeit ohne Ausrichtung ist die Ausrichtung bei Ihnen.

0
int i = 10; 
var radios = new[] { "", "", "" } 
    .Where(path => File.Exists(path)) 
    .Select(path => new RadioButton 
     { 
      AutoSize = false, 
      Image = Icon.ExtractAssociatedIcon(path).ToBitmap(), 
      Height = 100, 
      Width = 50, 
      Location = new Point(100, (i = i + 30)) 
     }) 
    .ToArray(); 

groupBox1.Controls.AddRange(radios); 
+0

Danke ... aber in meinem Fall hängt die Anzahl der Radio Buttons von der Anzahl der angegebenen Pfade ab. Was, wenn der Benutzer mehr Wege gibt, d. H. Dynamisch irgendeine Anzahl von RB verwendet werden könnte. – PawanS

+0

@Pawan: Verwenden Sie dann kein explizit deklariertes Array, sondern ein Array, das als Parameter übergeben wurde - vom Benutzer zurückgegeben – abatishchev

Verwandte Themen