Link to home
Start Free TrialLog in
Avatar of LongDave
LongDave

asked on

Store picturebox.image in an imagelist in VB.NET

Hi, experts -
I'm sure I'm just missing something ridiculously simple. I'm drawing a character in a picturebox, using Graphics objects associated with 2 pictureboxes (PB and PB2). After the character is drawn, I'm trying to put the picturebox image into an imagelist control. The imagelist is supposed to take an image of type "System.Drawing.Image" - which is what the picture box image should be (I assume). Yet in the line that is "IList1A.Images.Add (PB.Image)", I get an error saying that "Value can not be null" for PB.Image.

I just got through writing pixels on the bitmap of the PB, I don't see where it should be null. Can someone tell me what I'm doing wrong?

Thanks!

Dim g As Graphics = System.Drawing.Graphics.FromHwnd(PB.Handle)
                        Dim g1 As Graphics = System.Drawing.Graphics.FromHwnd(PB2.Handle)
 
                        For i = 1 To CellWidth
                            For l = Pointer1 + 1 To Pointer1 + 1 + CellHeight
                                'draw the '1's' as black
                                If Mid$(CellString(i), l, 1) = "1" Then
                                    g.DrawEllipse(Pens.Black, i - 1, CellHeight - (l - Pointer1), 1, 1)
                                    g1.DrawEllipse(Pens.Black, i - 1, CellHeight - (l - Pointer1), 1, 1)
                                Else
                                    g.DrawEllipse(Pens.Khaki, i - 1, CellHeight - (l - Pointer1), 1, 1)
                                    g1.DrawEllipse(Pens.DarkKhaki, i - 1, CellHeight - (l - Pointer1), 1, 1)
                                End If
                            Next l
                        Next i
 
                        ICount = ICount + 1
                        If j = 0 Then
                            IList1A.Images.Add(PB.Image)
                            IList1B.Images.Add(PB2.Image)

Open in new window

Avatar of Mike Tomlinson
Mike Tomlinson
Flag of United States of America image

"I just got through writing pixels on the bitmap of the PB, I don't see where it should be null. Can someone tell me what I'm doing wrong?"

No, essentially what you did was draw on TOP of the PictureBox...sorta like drawing in the same layer that would draw its Border if that Style was enabled:

    Dim g As Graphics = System.Drawing.Graphics.FromHwnd(PB.Handle)

If you want to draw on the Image that the PictureBox is DISPLAYING, then you would need:

    Dim g As Graphics = System.Drawing.Graphics.FromImage(PB.Image)

*** BUT *** this assumes that you have actually ASSIGNED a valid Image to the PictureBoxes Image() Property!

By default, a PictureBox doesn't display anything and the Image() Property would return "Nothing"...
ASKER CERTIFIED SOLUTION
Avatar of Mike Tomlinson
Mike Tomlinson
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of LongDave
LongDave

ASKER

Idle_Mind .... Not so Idle, m'man. Excellent suggestions - and it appears to work great! Many thanks .. all points are yours.