• 0

[VB.NET] Form Redraw?


Question

this is probably extremely easy to fix, but here goes.

i'm using a graphicspen to draw on a picturebox. however, every time i minimize/move another window oveer it, it disappears. i seem to remember a .ReDraw property in VB6, but it's not there. What's the .Net equivelant?

(Visual Basic, VS.NET 2003)

Link to comment
https://www.neowin.net/forum/topic/352258-vbnet-form-redraw/
Share on other sites

8 answers to this question

Recommended Posts

  • 0
  AMDPOX said:
this is probably extremely easy to fix, but here goes.

i'm using a graphicspen to draw on a picturebox.  however, every time i minimize/move another window oveer it, it disappears.  i seem to remember a .ReDraw property in VB6, but it's not there.  What's the .Net equivelant?

(Visual Basic, VS.NET 2003)

586306143[/snapback]

.Paint() usually forces whatever component it is to redraw itself.

  • 0
  AMDPOX said:
this is probably extremely easy to fix, but here goes.

i'm using a graphicspen to draw on a picturebox.? however, every time i minimize/move another window oveer it, it disappears.? i seem to remember a .ReDraw property in VB6, but it's not there.? What's the .Net equivelant?

(Visual Basic, VS.NET 2003)

586306143[/snapback]

.Invalidate() forces a redraw

If you use .Paint() you calling the sub directly, which isn't a good idea in this situation. It shouldn't hurt anything, but it's just better practice to use .Invalidate().

  • 0

i've tried:

    Private Sub Form1_LocationChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.LocationChanged
        pD.Invalidate()
    End Sub

    Private Sub Form1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.LostFocus
        pD.Invalidate()
    End Sub

and

    Private Sub Form1_LocationChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.LocationChanged
        Form1.Invalidate()
    End Sub

    Private Sub Form1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.LostFocus
        Form1.Invalidate()
    End Sub

where pD is the picturebox. But it appears that b the Invalidate are simply clearing the the picturebox. Paint() seems to be an event, not a method....?

  • 0
  AMDPOX said:
this is probably extremely easy to fix, but here goes.

i'm using a graphicspen to draw on a picturebox.  however, every time i minimize/move another window oveer it, it disappears.  i seem to remember a .ReDraw property in VB6, but it's not there.  What's the .Net equivelant?

(Visual Basic, VS.NET 2003)

586306143[/snapback]

Are you drawing on the picture box during its paint event? If not, do so. Then, in your form's resize and/or move event, invalidate the picturebox.

Edited by weenur
  • 0
  AMDPOX said:
i have the drawing commands in the MouseDown and MouseMove events... i dont see how i could put them in .Paint() and leave the functionality the same.. :(

586311835[/snapback]

Ah, ok. Makes sense now.

You need to draw to an image to preserve state. Create a class member variable that is an Image or Bitmap, and base it on the pictureBox.

Do this in the form constructor(New sub)

Dim g1 as Graphics = Graphics.FromHwnd(picturebox1.Handle)

' declared at the class level
picImg = new Bitmap(pictureBox1.ClientRectangle.Width, pictureBox1.ClientRectangle.Height, g1)

Handle the paint event for your picturebox and use the Graphics object to draw the image.

private sub PicPaint(sender as object, e as PaintEventArgs) handles pictureBox1.Paint

  e.Graphics.DrawImage(picImg, 0, 0)

end sub

Then in your mouse handler(up, i assume), draw on the image

  	end = new PointF(e.X, e.Y);

  	dim g2 as Graphics = Graphics.FromImage(picImg)
  	g2.DrawLine(Pens.Black, begin, end) ' or whatever
  	pictureBox1.Invalidate(false)

  • 0

I'm a newbie and pretty confused at this point. I have searched quite a bit for a solution to the same problem and have not been able to understand the code you posted.

I have a form with PictureBox1 and Button1 on it. My code looks like this:

Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button5.Click
     g = PictureBox1.CreateGraphics() 
     Dim g As Graphics
     Dim pRed As New Pen(Color.Red, 2)
     g.DrawLine(pRed, x1, y1, x2, y2)
End Sub

with x1, y1, x2, y2 being coordinates of the start and end of the line. That part works, but much like AMDPOX describes, when I minimize the window, the line disappears. I see that weenur has given him a reply with some code, but I guess I don't fully understand it.

When you say

  Quote
Do this in the form constructor(New sub)
I understand what the form constructor is, but not sure how I should make the New sub.

Also, I'm not sure what you mean by

  Quote
' declared at the class level
.

Could you show me what I should do with my code, and maybe paste the entire code of the form from top to bottom? I think that would help me understand the placement of each piece of code.

Again, I'm a newbie, so thank you for your patience with my 'newbieness' :)

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Anker announces recall of "More than One Million" power banks, here's how to check by Sayan Sen Anker has announced that it is recalling "more than a million" power banks as they are potentially very dangerous due to burn and fire hazards. Both Anker as well as the CPSC (Consumer Product Safety Commission) have released guidance and advisories on how to check if the power bank you are using is affected and how to proceed further if that is the case. First up, the affected model is the PowerCore 10000 power bank (Model: A1263) and CPSC notes that "Anker has received 19 reports of fires and explosions," which "includes two reports of minor burn injuries not requiring medical attention and 11 reports of property damage totaling over $60,700." Anker explains how you can identify the affected model. It writes: After checking and confirming whether your unit is eligible for the recall, Anker has recommended that you "stop using it immediately" and fill the form which provides you with either a free replacement Anker Power Bank (10K, 22.5W) (Model A1388) or a $30 gift card if replacements are back ordered, which is possible at the moment as it is a large scale recall with over a million affected units. You can find the recall form at this link on Anker's website and the announcement posts linked below. You can find the detailed instructions there. Source: Anker, CPSC
    • "Hey can you punch in a new address for me?" "VOICE ACTIVATION ONLY WHEN MOVING" Oh great, so now we have to pull over to put in the address because Siri or Google Assistant don't understand my language
    • Its really amazing someone survived that after watching a video of the crash. 
    • Apparently one survivor, he was sitting at the emergency exit and jumped out
    • https://deadline.com/2025/06/spaceballs-2-casts-rick-moranis-bill-pullman-keke-palmer-1236431204/
  • Recent Achievements

    • One Month Later
      Orpheus13 earned a badge
      One Month Later
    • Week One Done
      Orpheus13 earned a badge
      Week One Done
    • One Year In
      Orpheus13 earned a badge
      One Year In
    • Week One Done
      serfegyed earned a badge
      Week One Done
    • Week One Done
      fashionuae earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      526
    2. 2
      ATLien_0
      265
    3. 3
      +FloatingFatMan
      205
    4. 4
      +Edouard
      168
    5. 5
      Xenon
      122
  • Tell a friend

    Love Neowin? Tell a friend!