none
Añadir elementos al comboBox RRS feed

  • Pregunta

  • Hola:

    En el formulario tengo un comboBox. Quiero que al ejecutar el formulario me aparezca las unidades de disco que tengo instalado en el ordenador o PC.

    Lo que he hecho hasta ahora es esto.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.IO.Ports; // No olvidar.
    using System.Management; // No olvidar.
    
    namespace Almacenar_comboBox_Puerto_y_Lector_01
    {
        public partial class Form1 : Form
        {
            // Variable.
            string datos = "";
    
            public Form1()
            {
                InitializeComponent();
                UnidadDisco();
            }
    
            // Lectura de dispositivos.
            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]);
                    }
                }
            }
    
            void UnidadDisco()
            {
                // Delimitador.
                string[] datosCaracter = datos.Split(':');
    
                // Nombre de la unidad.
                ConsigueComponentes("Win32_CDROMDrive", "Id");
    
                foreach (char item in datosCaracter)
                {
                    comboBox_Unidad.Items.Add(item);
                }
    
    
                // Selecciona la primera unidad.
                comboBox_Unidad.SelectedIndex = 0;
            }
        }
    }
    

    Me sale el código en foreach. 

    No se puede convertir el tipo 'string' en 'char'.

    ¿Cómo lo soluciono?

    Saludos.


    http://electronica-pic.blogspot.com

    martes, 6 de abril de 2021 16:26

Respuestas

  • cambia

      string[] datosCaracter = datos.Split(':');      

    a

    char[] separador = new char[] { ':' };
    string[] datosCaracter = datos.Split(separador, StringSplitOptions.RemoveEmptyEntries);       

    Eso eliminará las cadenas vacías.

    • Marcado como respuesta Metaconta hace 15 horas 7 minutos
    lunes, 12 de abril de 2021 20:01

Todas las respuestas

  • El error es porque datosCaracter fue declarado como un arreglo de tipo string, entonces cambia el tipo de datos de item de char a string

                foreach (string item in datosCaracter)
                {
                    comboBox_Unidad.Items.Add(item);
                }

    Otro detalle del código es que estás inicializando la variable datosCaracter con tu variable global "datos" que tiene como valor cadena vacía, esa variable se llena con valores en el método "ConsigueComponentes", por lo que antes de inicializar datosCaracter, debes ejecutar "ConsigueComponentes" que llenará la varibale datos que usarás para incializar datosCaracter, por lo que el orden debe ser así:

            void UnidadDisco()
            {
                // Nombre de la unidad.
                ConsigueComponentes("Win32_CDROMDrive", "Id");
                // Delimitador.
                string[] datosCaracter = datos.Split(':');           
    
                foreach (string item in datosCaracter)
                {
                    comboBox_Unidad.Items.Add(item);
                }
    
    
                // Selecciona la primera unidad.
                comboBox_Unidad.SelectedIndex = 0;
            }

    martes, 6 de abril de 2021 18:36
  • Hola,

    Gracias por levantar tu consulta en los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    martes, 6 de abril de 2021 18:55
    Moderador
  • Ahora enel comboBox me aparece la F y un espacio en blanco para seleccionarlo.

    F
    espacio vacío
    G
    espacio vacío.

    Debe aparecer así:
    F:
    G:

    No me importa si aparece así:
    F
    G


    http://electronica-pic.blogspot.com

    miércoles, 7 de abril de 2021 15:11
  • cambia

      string[] datosCaracter = datos.Split(':');      

    a

    char[] separador = new char[] { ':' };
    string[] datosCaracter = datos.Split(separador, StringSplitOptions.RemoveEmptyEntries);       

    Eso eliminará las cadenas vacías.

    • Marcado como respuesta Metaconta hace 15 horas 7 minutos
    lunes, 12 de abril de 2021 20:01
  • Gracias, me funcionó así también.

                // Nombre de la unidad.
                ConsigueComponentes("Win32_CDROMDrive", "Id");
    
                // Borra espacios en blanco.
                datos = datos.Trim();
    
                // Delimitador.
                string[] unidad = datos.Split(' ');
                comboBox_Unidad.Items.AddRange(unidad);
               
    
                // Selecciona la primera unidad.
                comboBox_Unidad.SelectedIndex = 0;


    http://electronica-pic.blogspot.com

    hace 15 horas 7 minutos