none
Habilitar controles RRS feed

  • Pregunta

  •  Estimados buenas tardes,

    Quisiera pedir de su ayuda. 

     Tengo un tabControl1 con 3 pestañas, dentro de ellas 20 botones en cada pestaña.  Deseo  dejar en invisible las numeraciones(TAG)  que encuentre según una previa consulta a la base de datos . 

     por Ejemplo, a través de una consulta busco todas las numeraciones en uso, me lista las encontradas y recorro con un While cada una para tratar de llegar a esto: 

      while (reader_Next.Read())
                {
                    String MEsa = reader_Next.GetString(reader_Next.GetOrdinal("NumMesa")).ToString();
                    tabControl1.Tag[MEsa].Visible=false;  (Linea que deseo hacer y así no funciona :( )

                }

    EL problema es que no me reconoce la instancia directa al Tag, cabe mencionar que cada botón  tiene un TAG único. 

     De ante mano muchas gracias!

                   

    Llegaras a ser lo que quieras ser....

    martes, 21 de noviembre de 2017 20:54

Respuestas

  • Por ejemplo:

    var list = new List<string>();
    while (reader_Next.Read())
    {
    	//Agregar a la lista las "numeraciones en uso"
    	list.Add(reader_Next.GetString(reader_Next.GetOrdinal("NumMesa")));
    }
    //Cambiar el valor de la propiedad Visible a los botones cuya propiedad 'Tag' corresponda con un
    //elemento de la lista 'list'
    foreach (TabPage tabPage in tabControl1.TabPages)
    {                
    	foreach (Button btn in tabPage.Controls.Cast<Button>()
    		.Where(x => list.Contains(x.Tag.ToString())))
    		btn.Visible = false;
    }

    • Propuesto como respuesta Brayan De La Cruz martes, 21 de noviembre de 2017 21:30
    • Marcado como respuesta Chris-._.- martes, 21 de noviembre de 2017 21:36
    martes, 21 de noviembre de 2017 21:23

Todas las respuestas

  • hola chris

    utiliza un enable para inhabilitar los controles y este codigo con linq te sirva

    this.tabControl1.Controls.OfType<Button>().ToList().ForEach(b => b.Enabled = true);

    martes, 21 de noviembre de 2017 21:03
  • Buenas,

    El tag no es una matriz, sino que es una propiedad de cada control, para lo que quieres, puedes hacerlo asi:

    this.tabControl1.Controls.OfType<Button>().Where(x=>x.Tag.ToString() == MEsa).ToList().ForEach(b => b.Enabled = false);

    Lo que hace el código, es buscar todos los controles que tiene el tabcontrol, seleccionar los tipo button, obtener el que coincida con MEsa, y después hacerlo invisible

    Nos comentas el resultado

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    martes, 21 de noviembre de 2017 21:19
  • Entiendo que la Primera b seria el numero correspondiente al Tag y  la segunda b al numero encontrado en mi búsqueda, o me equivoco?

    Llegaras a ser lo que quieras ser....

    martes, 21 de noviembre de 2017 21:20
  • Por ejemplo:

    var list = new List<string>();
    while (reader_Next.Read())
    {
    	//Agregar a la lista las "numeraciones en uso"
    	list.Add(reader_Next.GetString(reader_Next.GetOrdinal("NumMesa")));
    }
    //Cambiar el valor de la propiedad Visible a los botones cuya propiedad 'Tag' corresponda con un
    //elemento de la lista 'list'
    foreach (TabPage tabPage in tabControl1.TabPages)
    {                
    	foreach (Button btn in tabPage.Controls.Cast<Button>()
    		.Where(x => list.Contains(x.Tag.ToString())))
    		btn.Visible = false;
    }

    • Propuesto como respuesta Brayan De La Cruz martes, 21 de noviembre de 2017 21:30
    • Marcado como respuesta Chris-._.- martes, 21 de noviembre de 2017 21:36
    martes, 21 de noviembre de 2017 21:23
  • Buenas

    No, la "b" o la "x", es una expresion lambda que hace referencia a cada item de la coleccion, cuando pongo Where(x=>x.Tag.ToString() == MEsa) significa que recorra la coleccion, y meta en un objeto de tipo IEnumerable los items que coincidan con la condicion. Despues lo paso a una lista, y en el ForEach(b=>b.Enable = false) lo que hace es, vuelve a recorrer la coleccion, y ejecuta item.Enable = false; para cada item.

    El nombre (nombre=> nombre.X) lo que expresa es, para cada item de la coleccion.... pero no tienes porque ser X o B, puedes poner el nombre que quieras antes del => , y luego utilizar ese nombre despues.

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    martes, 21 de noviembre de 2017 21:26
  • Estimado funciono a la perfección! 

     Le agradezco mucho su ayuda, Saludos!!  :) 


    Llegaras a ser lo que quieras ser....

    martes, 21 de noviembre de 2017 21:36