Jak seřadit seznam typ Ovládání

0

Otázka

Vytvořil jsem seznam ovládacích prvků na formulář, jako je tento:

            List<Control> list = new List<Control>();
            foreach (Control c in this.Controls)
            {
                if (c.GetType() == typeof(Label))
                {
                    list.Add(c);
                }
            }

Všechny ovládací prvky v tomto seznamu jsou Štítky, takže potřebuju seřadit tento seznam Kontrol ve vzestupném pořadí, takže jsem použít Druh metoda Seznam třídy, jako je tento:

list.Sort();

Ale to mi říká, System.InvalidOperationException: 'Failed to compare two elements in the array.' ArgumentException: At least one object must implement IComparable.

Od té doby chci vyřešit to pomocí TabIndex hodnotu, nebo alespoň jeho Jméno, to je jasné, pro mě. Co bych měl projít na Druh metody nebo co bych měl používat místo této metody?

c# controls list sorting
2021-10-27 17:14:53
2

Nejlepší odpověď

2

Můžete použít IEnumerable metody řadit podle a poskytují funkce, která určuje, jaký prvek jste porovnávání jako alternativu k používání druh.

using System;
using System.Collections.Generic;
using System.Linq;
                    
public class Program
{
    public static void Main()
    {
        var controls = new List<B>() {new B() {Index = 0}, new B() {Index = -1}};
        var sortedControls = controls.OrderBy(x => x.Index).ToList();
        Console.WriteLine(controls[0].Index); // -1
        Console.WriteLine(controls[1].Index); // 0
    }
}

public class B
{
    public int Index {get; set;}
}
2021-10-27 17:27:05
1

Můžete projít Comparison funkce list.Sort

var list = this.Controls.OfType<Label>().ToList();
list.Sort((a, b) => a.TabIndex.CompareTo(b.TabIndex));
2021-10-27 17:22:01

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................