none
Error en el PictureBox(codigo de barras)

    Pregunta

  • Hola, por que puede ser este error?

    "El codigo del usuario no controlo ObjectDisposedeExepcion"

    Me sale cuanto trato de guardar tengo un picture box y me sale el error ahi.

    El picture lo uso para generar un codigo de barras

    Este es el boton que lo genera:

    Dim bcode As New Barcode128
            bcode.BarHeight = 50
            bcode.Code = txtId.Text
            bcode.GenerateChecksum = True
            bcode.CodeType = Barcode.CODE128
            Try
                Dim bm As New Bitmap(bcode.CreateDrawingImage(Color.Black, Color.White))
                Dim img As Image
                img = New Bitmap(bm.Width, bm.Height)
                Dim g As Graphics = Graphics.FromImage(img)
                g.FillRectangle(New SolidBrush(Color.White), 0, 0, bm.Width, bm.Height)
                g.DrawImage(bm, 0, 0)
                PictureBox1.image = img
            Catch ex As Exception
                MsgBox("No se pudo generar el codigo de baras")
            End Try

    En la parte marcada en negrita me sale error cuando lo ejecuto.

     Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
            Dim bm As New Bitmap(PictureBox1.Width, PictureBox1.Height)
            PictureBox1.DrawToBitmap(bm, New Rectangle(0, 0, bm.Width, bm.Height))
            e.Graphics.DrawImage(bm, 0, 0)
        End Sub


    Espero me sepan responder, desde ya gracias.
    jueves, 13 de octubre de 2016 2:19

Respuestas

  • Bien, pero ¿DÓNDE está definido ese PictureBox1? No se ve en el código que has aportado. El error ObjectDisposedException ocurre cuando intentas acceder a las propiedades de un objeto que ya ha sido destruido. Por lo tanto, para detectar el error no basta con examinar el código en el que accedes al objeto, hay que remontarse al sitio donde se construye y destruye. Posiblemente lo tengas ubicado en un formulario que ya se ha cerrado antes de ejecutar el PrintDocument1_PrintPage. También podría ocurrir porque el PictureBox1 esté usando la referencia interna a su Image cuando invocas el DrawToBitmap. Y ese Image lo creaste previamente en una subrutina que ya descartó las variables utilizadas. En teoría esos objetos no debieron ser recogidos por el GarbageCollector debido a que aún son alcanzables a través de la referencia del picturebox, pero aunque el GC no los haya eliminado sí que puede ser que se haya ejecutado su Dispose y por eso estén lanzando el ObjectDisposedException.  Para verificar si el problema es este, haz la prueba provisional de mover el código que tienes escrito para rellenar el PictureBox al manejador del evento PrintPage. Si así funciona, entonces ya sabes que el problema era ese y puedes proceder a refactorizar el código usando para la imagen variables que no se destruyan entre medias de la generación de la imagen y la impresión de la misma.
    • Marcado como respuesta Federico32113 jueves, 13 de octubre de 2016 13:57
    jueves, 13 de octubre de 2016 6:34