locked
Excepción producida: "System.ArgumentOutOfRangeException" en mscorlib.dll RRS feed

  • Pregunta

  • Hola, estoy tratando de hacer que un ComboBox arroje datos relacionados con las impresoras instaladas, pero al cuando no hay impresoras más que las predeterminadas (Microsoft XPS Document Writer, Microsoft print to PDF, Fax) marca una excepción que hace que este comience a dejar de funcionar...

    El mensaje de la excepción es el siguiente:

    El índice estaba fuera del intervalo. Debe ser un valor no negativo e inferior al tamaño de la colección. Nombre del parámetro: index

    Excepción producida: "System.ArgumentOutOfRangeException" en mscorlib.dll ("El índice estaba fuera del intervalo. Debe ser un valor no negativo e inferior al tamaño de la colección.") Excepción producida: "System.ArgumentOutOfRangeException" en mscorlib.dll ("El índice estaba fuera del intervalo. Debe ser un valor no negativo e inferior al tamaño de la colección.") Hipervínculo: Activar depuración histórica 69,81s [11324] Subproceso principal

    El código donde se produce es (Precisamente en la linea resaltada):

    private void Cmbimpresora_Click(object sender, EventArgs e)
                        {
                            try
                                {
                                    if(actualizar == 1)
                                        {
                                            Cmbimpresora.Items.Clear();
                                            actualizar = 0;
                                        }
    
                                    if(actualizar == 0)
                                        {
                                            foreach (String strPrinter in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
                                                {
                                                    Cmbimpresora.Items.Add(strPrinter);
                                                }
                                            actualizar++;
                                        }
                                    if(Cmbimpresora.Text == "" && !String.IsNullOrEmpty(DGV.Rows[0].Cells["IMPRESORA"].Value.ToString()))
                                        {
                                            Cmbimpresora.Text = $"{DGV.Rows[0].Cells["IMPRESORA"].Value.ToString()}";
                                        }
                                }
                            catch (Exception ex)
                                {
                                    VARGLOBAL.NOTIFICACION(1,$"No hay impresoras disponibles, error: {ex.Message}");
                                }
                        } 

    ¿Alguien puede decirme que hago mal por favor?

    sábado, 16 de mayo de 2020 22:01

Respuestas

  • No funciono, sigue con el mismo error... lo dejare sin esas lineas, de esta forma no me lanza nada mas que lo que se ocupa:

    private void Cmbimpresora_Click(object sender, EventArgs e)
                        {
                            try
                                {
                                    if(actualizar == 1)
                                        {
                                            Cmbimpresora.Items.Clear();
                                            actualizar = 0;
                                        }
    
                                    if(actualizar == 0)
                                        {
                                            foreach (String strPrinter in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
                                                {
                                                    Cmbimpresora.Items.Add(strPrinter);
                                                }
                                            actualizar++;
                                        }
                                }
                            catch (Exception ex)
                                {
                                    VARGLOBAL.NOTIFICACION(1,$"No hay impresoras disponibles, error: {ex.Message}");
                                }
                        }
    Gracias, por responder

    • Marcado como respuesta TORO BLANCO domingo, 17 de mayo de 2020 1:10
    domingo, 17 de mayo de 2020 1:10

Todas las respuestas

  • Hola

     si no tiene impresoras inserta una condicion

    if(Cmbimpresora.Items.Count == 0) 
        return;
    al inicio de la funcion, asi si no tiene impresoras se sarldra de la funcion

    • Marcado como respuesta TORO BLANCO sábado, 16 de mayo de 2020 23:18
    • Desmarcado como respuesta TORO BLANCO sábado, 16 de mayo de 2020 23:18
    sábado, 16 de mayo de 2020 22:43
  • Gracias por responder, este sigue marcando el mismo error, no se si la implementación de lo que me dices esta correcto:

    private void Cmbimpresora_Click(object sender, EventArgs e)
                        {
                            try
                                {
                                    if(Cmbimpresora.Items.Count == 0) 
                                    return;
                                    if(actualizar == 1)
                                        {
                                            Cmbimpresora.Items.Clear();
                                            actualizar = 0;
                                        }
    
                                    if(actualizar == 0)
                                        {
                                            foreach (String strPrinter in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
                                                {
                                                    Cmbimpresora.Items.Add(strPrinter);
                                                }
                                            actualizar++;
                                        }
                                    if(Cmbimpresora.Text == "" && !String.IsNullOrEmpty(DGV.Rows[0].Cells["IMPRESORA"].Value.ToString()))
                                        {
                                            Cmbimpresora.Text = $"{DGV.Rows[0].Cells["IMPRESORA"].Value.ToString()}";
                                        }
                                }
                            catch (Exception ex)
                                {
                                    VARGLOBAL.NOTIFICACION(1,$"No hay impresoras disponibles, error: {ex.Message}");
                                }
                        }

    Estoy optando por eliminar la linea de código que me genera el error ya que es algo opcional...

    sábado, 16 de mayo de 2020 23:24
  • Hola

    intenta insertarlo al inicio

    antes del try

    Ademas revisando a fondo tu codigo para que le agregas las impresoras en la funcion,creo que lo ideal seria agregarlas en el Load y en Click solo usar la que se selecciono


    • Editado Marti Llam domingo, 17 de mayo de 2020 1:12
    domingo, 17 de mayo de 2020 0:54
  • No funciono, sigue con el mismo error... lo dejare sin esas lineas, de esta forma no me lanza nada mas que lo que se ocupa:

    private void Cmbimpresora_Click(object sender, EventArgs e)
                        {
                            try
                                {
                                    if(actualizar == 1)
                                        {
                                            Cmbimpresora.Items.Clear();
                                            actualizar = 0;
                                        }
    
                                    if(actualizar == 0)
                                        {
                                            foreach (String strPrinter in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
                                                {
                                                    Cmbimpresora.Items.Add(strPrinter);
                                                }
                                            actualizar++;
                                        }
                                }
                            catch (Exception ex)
                                {
                                    VARGLOBAL.NOTIFICACION(1,$"No hay impresoras disponibles, error: {ex.Message}");
                                }
                        }
    Gracias, por responder

    • Marcado como respuesta TORO BLANCO domingo, 17 de mayo de 2020 1:10
    domingo, 17 de mayo de 2020 1:10
  • Procedo a cerrar el thread. Si tienes otra consulta, te invito a postear un nuevo thread!

    Luis Diego Mora
    __________
    lunes, 18 de mayo de 2020 14:04
    Moderador