none
Reordenar controles de un FlowLayoutPanel RRS feed

  • Pregunta

  • Hola,

    En un FlowLayoutPanel tengo varios controles que heredan de Button y tienen una propiedad numérica que denomino Codigo.

    Me gustaría poder reordenar esos controles en base a dicha propiedad

    Es decir si tengo:

    • ControlA codigo:1055
    • ControlB codigo:1158
    • ControlC codigo:1007

    me gustaría reordenar de forma descendente dichos controles así:

    • ControlB codigo:1158
    • ControlA codigo:1055
    • ControlC codigo:1007

     

    Estoy probando con List, SortList pero no lo consigo

    me echáis una mano?

     

    Gracias!

     

     


    Un saludo,
    Raúl Serrano
    miércoles, 30 de noviembre de 2011 11:08

Respuestas

  • Siguendo la idea de David...

    List<Button> botones = new List<Button>();
    			
    foreach (Button boton in flowLayoutPanel1.Controls)
    {
    	botones.Add(boton);
    }
    
    IEnumerable<Button> res = botones.OrderByDescending(b=>b.Text);
    			
    int k = 0;
    foreach (Button boton in res)
    {
    	flowLayoutPanel1.Controls.SetChildIndex(boton, k++);
    }
    
    

    Crea una lista enumerando los botones del panel.

    Luego generas una lista ordenada (en este caso lo hice con la propiedad Text del botón, vos lo harías con su propiedad código)

    Finalmente, modifico el índice de cada botón dentro de la colección de controles del panel.

     

     

     

    • Marcado como respuesta Raúl Serrano viernes, 2 de diciembre de 2011 8:06
    miércoles, 30 de noviembre de 2011 22:54

Todas las respuestas

  • Según creo recordar, los controles del flowlayout se ordenan por el orden de inserción dentro de él.

    Así pues, si los estás dibujando en tiempo de diseño tendran que estar en orden, o eso creo.

    Si los agregar mediante programación puedes echar mano de LINQ para ordenar los esos controles dentro de una lista y agregarlos en el orden que creas conveniente.

    Espero que esto te de alguna idea.


    Vota mi respuesta si te ha sido útil. Gracias.
    miércoles, 30 de noviembre de 2011 18:39
  • Siguendo la idea de David...

    List<Button> botones = new List<Button>();
    			
    foreach (Button boton in flowLayoutPanel1.Controls)
    {
    	botones.Add(boton);
    }
    
    IEnumerable<Button> res = botones.OrderByDescending(b=>b.Text);
    			
    int k = 0;
    foreach (Button boton in res)
    {
    	flowLayoutPanel1.Controls.SetChildIndex(boton, k++);
    }
    
    

    Crea una lista enumerando los botones del panel.

    Luego generas una lista ordenada (en este caso lo hice con la propiedad Text del botón, vos lo harías con su propiedad código)

    Finalmente, modifico el índice de cada botón dentro de la colección de controles del panel.

     

     

     

    • Marcado como respuesta Raúl Serrano viernes, 2 de diciembre de 2011 8:06
    miércoles, 30 de noviembre de 2011 22:54
  • gracias,

    tus indicaciones me han servido mucho!

     

     


    Un saludo,
    Raúl Serrano
    viernes, 2 de diciembre de 2011 8:06
  • gracias David,

    ese es el tema que estaba ahi atrancado sin saber como ordenar una lista por mis propiedades

     


    Un saludo,
    Raúl Serrano
    viernes, 2 de diciembre de 2011 8:08