Ako zoradiť zoznam Ovládanie typ

0

Otázka

Som vytvoril zoznam kontrol na forme, ako je tento:

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

Všetky ovládacie prvky v tomto zozname sú Menovky, tak musím zoradiť tento zoznam Kontrol vo vzostupnom poradí, tak používam Druh metóda Zoznam tried, ako je tento:

list.Sort();

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

Keďže som sa chcete zoradiť pomocou TabIndex hodnoty, alebo aspoň jej Meno, je to jasné, pre mňa. Čo by som mal prejsť na Druh metóda alebo čo by som mal použiť namiesto tejto metódy?

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

Najlepšiu odpoveď

2

Môžete použiť rozhranie IEnumerable spôsob OrderBy a poskytne jej funkciu, ktorá určuje, aký prvok porovnávate ako alternatíva pre použitie druhu.

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 prejsť Comparison funkcia 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 iných jazykoch

Táto stránka je v iných jazykoch

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