• 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

    • WhatsApp document scanning gets closer to launch as more beta testers get access by Paul Hill Meta looks as though it’s getting closer to releasing WhatsApp’s native document scanner on Android because more people are now reporting they have access in the beta. This will give users a privacy-friendly way to snap photos of documents and automatically convert them to PDF ready for sharing. According to WABetaInfo, the feature comes with two modes: manual and automatic. The manual capture gives users more control over the process allowing them to adjust positioning and lighting to get the best quality scan. Automatic mode on the other hand automatically detects the edge of your document on its own and snaps the image without too much user input, making it faster and easier. Once the picture is taken, WhatsApp automatically converts it to a PDF file so that it can be shared and opened easily by the recipient. The file can be sent within private chats or group conversations. The entire scanning and conversion process takes place locally on your device, using Android’s built-in API for snapping documents. The document itself is also only stored locally until you decide to send it. Just like other WhatsApp messages, these scans are secured with end-to-end encryption when you send them to recipients. The only privacy risk is the user sending the PDF to the wrong person. The new feature was first noticed for Android a few weeks ago and with the latest beta it’s rolling out to more people. Once Meta has tested it across a wide array of devices, we will likely see it land for people on the stable version of WhatsApp. In recent weeks, we have also seen that Meta is testing new chat color themes in the beta releases. That feature doesn’t seem to have filtered down to the stable version yet, so be on the lookout for that too if that’s of interest to you.
    • Silly, illinformed comment but thanks for playing anyway. I mean, are you actually comparing a default browser on well over a billion devices with Firefox?
    • Of course you haven't. Microsoft evangelical James is making *hit up.
    • The way time and things are going, Mozilla might oneday surprise everybody by giving up Firefox estimating "no future growth potential" and moving it to the security and maintenance updates only mode. We've seen something like that before ... and Mozilla still doing it.
  • Recent Achievements

    • Collaborator
      Mighty Pen went up a rank
      Collaborator
    • Week One Done
      emptyother earned a badge
      Week One Done
    • Week One Done
      DarkWun earned a badge
      Week One Done
    • Very Popular
      valkyr09 earned a badge
      Very Popular
    • Week One Done
      suprememobiles earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      565
    2. 2
      +FloatingFatMan
      184
    3. 3
      ATLien_0
      175
    4. 4
      Xenon
      112
    5. 5
      Skyfrog
      111
  • Tell a friend

    Love Neowin? Tell a friend!