Label im Panel nach Index sortieren

13/03/2010 - 20:04 von Alexander Richter | Report spam
Hallo,
ich habe ein Problem mit einer Windows-Forms-Anwendung, die
ein Panel besitzt und in diesem sind fünf Labels mit AutoSize = false.
Die fünf Label besitzt die Eigenschaft Dock = Bottom.
Im Panel müssten die Label dann so angeordnet sein:

Label5
Label4
Label3
Label2
Label1

Weiterhin gibt es einen Button "Entfernen" mit dem Code:
private void button1_Click(object sender, EventArgs e) {
foreach (Control control in panel1.Controls) {
if(control.Name == "label3") {
panel1.Controls.Remove(control);
control.Dispose();
}
}
}

Danach ist Label3 gelöscht.
Mit einem weiteren Button "Hinzufügen" will ich zur Laufzeit wieder
das Label3 erzeugen.
private void button2_Click(object sender, EventArgs e) {
Label label3 = new Label();
label3.Text = "label3";
label3.AutoSize = false;
label3.Dock = DockStyle.Bottom;
panel1.Controls.Add(label3);
}

Danach sieht die Reihenfolge der Label so aus:

Label5
Label4
Label2
Label1
Label3

Und jetzt will ich die Label wieder so sortieren, dass die Reihenfolge wie
beim
Programmstart ist. Dazu will ich über den Index sortieren.

private void button3_Click(object sender, EventArgs e) {
foreach (Control control in panel1.Controls) {
if (control.Name == "label5") panel1.Controls.SetChildIndex(control,
0);
if (control.Name == "label4") panel1.Controls.SetChildIndex(control,
1);
if (control.Name == "label3") panel1.Controls.SetChildIndex(control,
2);
if (control.Name == "label2") panel1.Controls.SetChildIndex(control,
3);
if (control.Name == "label1") panel1.Controls.SetChildIndex(control,
4);
}
}

Die Reihenfolge stimmt aber nicht.

Label5
Label4
Label1
Label2
Label3

Weiß jemand, wie man mit Hilfe vom Index die Label richtig sortiert?


Alexander
 

Lesen sie die antworten

#1 Frank Dzaebel
13/03/2010 - 21:29 | Warnen spam
Hallo Alexander,

Und jetzt will ich die Label wieder so sortieren, dass die
Reihenfolge wie beim Programmstart ist.



Du hattest noch den Namen von label3 nicht gesetzt.
Ansonsten zum Beispiel mit Linq:

private void button2_Click(object sender, EventArgs e)
{
Label label3 = new Label();
label3.Text = "label3"; label3.Name = "label3";
label3.AutoSize = false; label3.Dock = DockStyle.Bottom;
panel1.Controls.Add(label3); SortByName(label3.Parent);
}

private void SortByName(Control panel)
{
var query = from c in panel.Controls.OfType<Label>()
orderby c.Name descending select c;
int anz = panel.Controls.Count;
for (int i = 0; i < anz; i++)
panel.Controls.SetChildIndex(query.ElementAt(i), i);
}


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen