elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Generar CheckBox de manera automatica
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Generar CheckBox de manera automatica  (Leído 3,137 veces)
rigorvzla

Desconectado Desconectado

Mensajes: 221


Ver Perfil
Generar CheckBox de manera automatica
« en: 16 Junio 2019, 19:42 pm »

Hola a todos, en este momento me encuentro con un asunto que no doy como solventarlo, necesito en un listbox, listar archivos, cosa que hace, mas necesito que al final me genere un checkbox con el cual evaluare si quiero o no instalar el programa

anexo el codigo que uso
Código:
private void CargaArchivos(string ruta)
        {
           System.Windows.Controls.CheckBox chb = new System.Windows.Controls.CheckBox();
            chb.Content = "Instalar";
            chb.IsChecked = false;
            chb.Foreground = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.Green);
            
            listProgramas.Items.Add(chb);

            string[] ubicacion = Directory.GetFiles(Environment.CurrentDirectory + ruta);
            double f;

            for (int i = 0; i < ubicacion.Length; i++)
            {
                FileVersionInfo info = FileVersionInfo.GetVersionInfo(ubicacion[i]);
                FileInfo file = new FileInfo(ubicacion[i]);

                if (file.Length < 1048576)
                {
                    f = file.Length / 1024;
                    listProgramas.Items.Add(file.Name + " Version: " + info.FileVersion + " Peso: " + f.ToString() + " Kb" + chb);
                    listProgramas.Items.Add(chb);
                }
                else
                {
                    f = file.Length / 1024;
                    double q = f / 1024;
                    listProgramas.Items.Add(file.Name + " Version: " + info.FileVersion + " Peso: " + Math.Round(q, 2).ToString() + " Mb" + chb);
                    listProgramas.Items.Add(chb);
                }
                
            }
        }

como ven el puede agregar el combobox al principio, pero luego queda ocupado y salta un error de no poder generarlo de nuevo, por otro lado si comentamos " listProgramas.Items.Add(chb);"

Nos fijamos en esta linea
Código:
listProgramas.Items.Add(file.Name + " Version: " + info.FileVersion + " Peso: " + Math.Round(q, 2).ToString() + " Mb" + chb);
o esta
Código:
 listProgramas.Items.Add(file.Name + " Version: " + info.FileVersion + " Peso: " + f.ToString() + " Kb" + chb);
y no genera el checkbox, lo coloca como si fuera un .ToString() , alguien sabra como poder solucionar eso?


« Última modificación: 16 Junio 2019, 19:44 pm por rigorvzla » En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Generar CheckBox de manera automatica
« Respuesta #1 en: 17 Junio 2019, 01:46 am »

Es un código 'raro'...

De entrada que tiene que ver un objeto control, con una lista de ficheros?.
Cuál es el objetivo de añadir el nombre del control 'checkbox' a dicha lista?.

En los lenguajes de Microsoft, se permite tener "un miembro por defecto", como el miembro que será invocado figuradamente, cuando se indique solamente el nombre del objeto.

Habitualmente suele dejarse la propiedad nombre (de tipo string), como el miembro por defecto.
Así por ejemplo si tienes un botón llamado btnMover, al hacer un 'messagebox.Show (btnMover)' mostrásrá lo mismo que si se se hubiera escrito 'messagebox.Show(btnMover.Name)'

Por otro lado, si tu tienes un listbox (el supuesto llamado listProgramas), lo que añades son strings, pués es una colección de tipo string. Entonces correctamente añade el nombre del checkbox, no el propio control.
Para añadir el control debería ser una colección de controles, o más específicamente de 'checkboxes', o menos restrictivo, de objetos genéricos. (OBJECT es el tipo genérico, y tanto un string como un tipo de datos numérico o un control checkbox son objetos, ahora bien, por eficiencia suele convenir que si se conoce que tipos de objetos van a ser añadidos y son todos del mismo tipo, dicha colección sea homogénea, ...de ese mismo tipo. Y si no se sabe que tipos de objetos van a ser añadidos, pués sí, entonces es cuando convendría usar una colección heterogénea.

Entonces que añadas un string a una colección de strings (además varias veces pués está dentro de un bucle), es correcto, tu error es pués semántico. No entiendes lo que estás haciendo.

Si creas un control, lo lógico es que lo añadas a un contenedor de la interfaz de usuario, ...al form mismo de la ventana que esperes que deba estar, etc... y lo hagas visible cuando quieras que se vea e invisible cuando no desees que se vea.
Por lo mismo, ¿qué problema tendrías en añadirlo durante diseño de modo invisible y cuando proceda reposicionarlo y hacerlo visible?.


« Última modificación: 17 Junio 2019, 01:51 am por NEBIRE » En línea

rigorvzla

Desconectado Desconectado

Mensajes: 221


Ver Perfil
Re: Generar CheckBox de manera automatica
« Respuesta #2 en: 17 Junio 2019, 04:33 am »

hola de nuevo, lo q deseo hacer es en un list box, en cada linea del list box , quiero agregar un checkbox para poder hacerle click marcarlo o desmarcarlo, para poder evaluar eso y permitir o no la accion que quiero (instalar dicho programa listado).

imagine que asi seria una forma de hacerlo pero ... no resulto.

lo otro es que no  tengo una cantidad estatica de cuantos checkbox necesitare , eso lo determina el for que se muestra en el codigo, osea si en el listbox se muestran 10 archivos seria 10 checkbox uno en cada linea.

ese es el objetivo que deseo lograr.
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Generar CheckBox de manera automatica
« Respuesta #3 en: 17 Junio 2019, 23:28 pm »

Para permitir seleccionar más de 1 elemento a la vez en el listbox, conviene cambiar el valor de la propiedad selectionMode del listbox.

Una vez que dicha propiedad esté activada (mejor en diseño) , puede seleccionarse múltiples ítems en el listbox y puede acudirse despés a un bucle, o bien para recorrerlos todos y ver cuales están seleccionados, o bien obtener previamente una colección mediante "SelectedIndices" ó SelectedItems" y recorrer solo esos... es trivial lo uno o lo otro.

Código
  1. For each ix as integer in listbox1.SelectedIndices
  2.   ' lo que sea que deba hacerse... por ejemplo informar...
  3.   messagebox.show "Ha decidido instalar el elemento: " & vbnewline & _
  4.       ListBox1.Items.Item(ix).ToString
  5. next
  6.  
  7. ' si procede, al final deseleccinar todos...
  8. listbox1.clearSelected
  9. ' o bien en el bucle deseleccionar elementos individuales según la acción que se realice.
  10. '   por ejemplo si se van a instalar cosas, deseleccionar cada elemetno instalado y
  11. '   dejar seleccionado aquellos que fallaron
  12. '   (porque por ejemplo requieren la presencia de alguna librería ausente, etc...).
  13.  
  14.  


Entonces se hace innecesario añadir ningún chekbox más para algo que ya provee el propio control. Y simplifica el código necesario...

El usuario puede seleccionar o deseleccionar el ítem que desee, pulsando sobre él. Tú solo deberás proveer un botón para iniciar la acción correspondiente conforme a los ítems seleccionados (tal como se muestra en el bucle del escueto código de ejemplo).


p.d.: dicho de otra manera:
Cada elemento en un listbox puede actuar como un checkbox... en VS6 incluso había una propiedad 'Style' en el control listbox, que permitía mostrar gráficamente el ítem como un checkbox. Cambiando el valor de la propiedad selectionMode, permite la selección múltiple (simple o compleja de selección), luego actúan como 'checkbox', sin ello los elementos del listbox actúan como 'radiobuttons', así puede seleccionarse múltiples elementos.
Te basta informar convenientemente al usuario, añade un label encima del listbox, indicando algo como:
"Seleccione a continuación los elementos que desea instalar de la lista (y luego pulse el botón de confirmación)".
« Última modificación: 18 Junio 2019, 00:08 am por NEBIRE » En línea

rigorvzla

Desconectado Desconectado

Mensajes: 221


Ver Perfil
Re: Generar CheckBox de manera automatica
« Respuesta #4 en: 18 Junio 2019, 00:29 am »

Citar
Para permitir seleccionar más de 1 elemento a la vez en el listbox, conviene cambiar el valor de la propiedad selectionMode del listbox.

Hombre! no sabia esto!! muchas gracias espero sea igual en wpf c#, si es asi como dices es innecesario crear un checkbox aparte como tu estas diciendo, y en efecto.
Citar
Una vez que dicha propiedad esté activada (mejor en diseño) , puede seleccionarse múltiples ítems en el listbox y puede acudirse despés a un bucle, o bien para recorrerlos todos y ver cuales están seleccionados, o bien obtener previamente una colección mediante "SelectedIndices" ó SelectedItems" y recorrer solo esos... es trivial lo uno o lo otro.


Citar
Cada elemento en un listbox puede actuar como un checkbox... en VS6 incluso había una propiedad 'Style' en el control listbox, que permitía mostrar gráficamente el ítem como un checkbox. Cambiando el valor de la propiedad selectionMode, permite la selección múltiple (simple o compleja de selección), luego actúan como 'checkbox', sin ello los elementos del listbox actúan como 'radiobuttons', así puede seleccionarse múltiples elementos.
Te basta informar convenientemente al usuario, añade un label encima del listbox, indicando algo como:
"Seleccione a continuación los elementos que desea instalar de la lista (y luego pulse el botón de confirmación)".

este es mi pensar , al poder seleccionar dicho elemento con el checkbox, evaluar los q estan en tru y asi ejecutar la accion con un boton, me pondre a ver esa propiedad muchas gracias!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines