Comment faire pour trier la liste de Contrôle de type

0

La question

J'ai créé la liste de contrôles de formulaire, comme ceci:

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

Tous les contrôles dans cette liste sont des Étiquettes, donc j'ai besoin de trier cette liste de Commandes dans l'ordre croissant, donc j'utilise de Tri de la méthode de la Liste de la classe comme ceci:

list.Sort();

Mais il me dit System.InvalidOperationException: 'Failed to compare two elements in the array.' ArgumentException: At least one object must implement IComparable.

Depuis que j'ai envie de faire le tri à l'aide de la propriété TabIndex de la valeur ou au moins son Nom, il n'est pas clair pour moi. Que dois-je passer à Trier méthode ou que dois-je utiliser à la place de cette méthode?

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

La meilleure réponse

2

Vous pouvez utiliser l' interface IEnumerable méthode de Tri et de lui fournir une fonction qui indique quel élément de la comparaison, comme une alternative à l'utilisation de tri.

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

Vous pouvez passer une Comparison la fonction de list.Sort

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

Dans d'autres langues

Cette page est dans d'autres langues

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