Cómo ordenar la lista de Control de tipo

0

Pregunta

He creado la lista de controles en el formulario como este:

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

Todos los controles en esta lista son las Etiquetas así que tengo que ordenar esta lista de Controles en orden ascendente, por lo que utilizar Ordenar método de la clase Lista como esta:

list.Sort();

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

Ya quiero aclararlo mediante TabIndex valor o al menos su Nombre, no está claro para mí. ¿Qué debería pasar para Ordenar método o qué debo usar en lugar de este método?

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

Mejor respuesta

2

Puede utilizar la interfaz IEnumerable método de OrderBy y proporcionar una función que especifica qué elemento se comparan como una alternativa al uso de ordenación.

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

Usted puede pasar un Comparison la función list.Sort

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

En otros idiomas

Esta página está en otros idiomas

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