Autor
|
Tema: Corregir o quitar elementos del comBoBox (Leído 8,283 veces)
|
Meta
|
Hola:
Quiero añadir unidades detectadas de si hay lectores en un PC o ordenador.
Cada vez que me detecta dos lectores en el comboBox me lo rellena así:
F : G :
Como cuatros elementos cuando en realidad son dos y debe mostrarlos así: F: G:
Me da igual si solo también se queda como abajo. F G
¿Hay alguna forma de corregir estas cosas?
Saludos.
|
|
|
En línea
|
|
|
|
K-YreX
Desconectado
Mensajes: 1.008
|
Sin tener más datos sobre cómo lo has implementado, la solución más genérica que se me ocurre es comparar si el valor es igual a ":" antes de agregarlo al combobox y en caso afirmativo, ignorar ese elemento.
Viendo el código de esa parte del programa igual se puede obtener una solución más "limpia" por decirlo de alguna manera.
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
Meta
|
Lo intenté hacer con remove al comoBox, se borra, pero cuando encuentra otra unidad sigue el problema. private void Form1_Load(object sender, EventArgs e) { // Nombre de la unidad. ConsigueComponentes("Win32_CDROMDrive", "Id"); foreach (char item in datos) { comboBox_Unidad.Items.Add(item); } // Selecciona la primera unidad. comboBox_Unidad.SelectedIndex = 0; // Limpiar. datos = ""; }
|
|
|
En línea
|
|
|
|
K-YreX
Desconectado
Mensajes: 1.008
|
Claro, si digamos que en <datos> tienes algo como: Y vas recorriendo y agregando carácter a carácter pues agregarás:
Otra solución: string[] unidades = datos.Split(':'); foreach(string unidad in unidades) combobox.Items.Add(unidad);
Resultado: El delimitador (':') no se incluye en las subcadenas. Para incluirlo puedes hacerlo manualmente: combobox.Items.Add(unidad + ":");
O mediante un for() y el método Substring() o similares para recoger dos caracteres en vez de uno.
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
Meta
|
No se que pasa. En vez de verse: F: G: En el comboBox, aparece esto. Ver imagen. En este otro código de abajo, solo se me ve así: G: : ¿Dónde está la F:? void UnidadDisco() { // Nombre de la unidad. ConsigueComponentes("Win32_CDROMDrive", "Id"); // Delimitador. string[] unidades = datos.Split(':'); foreach (string unidad in unidades) { comboBox_Unidad.Items.Add(unidad + ":"); } // Selecciona la primera unidad. comboBox_Unidad.SelectedIndex = 0; }
Saludos.
|
|
|
En línea
|
|
|
|
Serapis
|
Es aún más sencillo, en NET muchas colecciones admiten la adicion de un array directamente con 'AddRange', lo que nos evita la necesidad de usar un bucle... private void button1_Click(object sender, EventArgs e) { string[] uds= "C:D:F:G:".Split(':'); comboBox1.Items.AddRange(uds); //comboBox1.Items.AddRange(unidades.Split(':')); //el Split se puede hacer en una sola linea. }
Si además quieres que aparezcan los dos puntos, es preferible modificar el string de entrada, remplazando los dos puntos por los puntos y un espacio (y entonces hacer el Split por el espacio).
|
|
|
En línea
|
|
|
|
Meta
|
La idea es que me detecte las unidades de disco que tengo instalada o detectada.
|
|
|
En línea
|
|
|
|
K-YreX
Desconectado
Mensajes: 1.008
|
No se que pasa. En vez de verse: F: G: En el comboBox, aparece esto. Ver imagen. En este otro código de abajo, solo se me ve así: G: : ¿Dónde está la F:? void UnidadDisco() { // Nombre de la unidad. ConsigueComponentes("Win32_CDROMDrive", "Id"); // Delimitador. string[] unidades = datos.Split(':'); foreach (string unidad in unidades) { comboBox_Unidad.Items.Add(unidad + ":"); } // Selecciona la primera unidad. comboBox_Unidad.SelectedIndex = 0; }
Saludos. Por un lado, no se puede ver la imagen. Ni en el cuadro de imagen ni mediante el enlace de "Ver imagen". Y por otro lado, si no se muestra correctamente la F tiene que ser porque en la variable <datos> no está bien guardado. Si el resultado ha sido: tiene que ser porque en <datos> estaba almacenado la siguiente cadena: "G::". Prueba a imprimir el contenido de <datos> para comprobarlo.
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
Serapis
|
La idea es que me detecte las unidades de disco que tengo instalada o detectada. Usa GetDevices... quizás tengas que añadir una referencia al ensamblado.
|
|
|
En línea
|
|
|
|
Meta
|
Si lo hago así: void UnidadDisco() { // Nombre de la unidad. ConsigueComponentes("Win32_CDROMDrive", "Id"); // Delimitador. string[] unidad = datos.Split(' '); comboBox_Unidad.Items.AddRange(unidad); //comboBox_Unidad.Items.AddRange(unidades.Split(':')); //el Split se puede hacer en una sola linea. // Selecciona la primera unidad. comboBox_Unidad.SelectedIndex = 0; }
Me di cuenta que en dato primero pone F: Luego hace otra pasada en el código de abajo. void ConsigueComponentes(string hwclass, string syntax) { ManagementObjectSearcher mos = new ManagementObjectSearcher ("root\\CIMV2", "SELECT * FROM " + hwclass ); foreach (ManagementObject mj in mos.Get()) { if (Convert.ToString(mj[syntax]) != "") { datos = Convert.ToString(mj[syntax]); } } }
Y se pone en G: borrando la F:
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Corregir velocidad de DVD (PAL) -4%
Multimedia
|
JimmyCool
|
0
|
2,113
|
26 Abril 2008, 09:35 am
por JimmyCool
|
|
|
Consulta SQL;Listar elementos que estan presentes en TODOS los elementos de otra
Desarrollo Web
|
astinx
|
2
|
5,121
|
2 Noviembre 2011, 23:06 pm
por astinx
|
|
|
Quitar elementos mysql
PHP
|
jalbtercero
|
5
|
2,759
|
6 Marzo 2016, 17:53 pm
por #!drvy
|
|
|
Quitar ciertos elementos de un Array
Programación C/C++
|
luisito45
|
4
|
2,226
|
28 Abril 2017, 10:06 am
por MAFUS
|
|
|
Añadir elementos al comboBox
.NET (C#, VB.NET, ASP)
|
Meta
|
2
|
3,508
|
29 Marzo 2021, 21:25 pm
por Meta
|
|