vb.net在picturebox上重画矩形及其失效方法

vb.net在picturebox上重画矩形及其失效方法,vb.net,drawing,picturebox,invalidation,Vb.net,Drawing,Picturebox,Invalidation,我试图在一个图片盒上创建一个大小和位置随机的矩形。每次用户单击按钮时,矩形将被删除,并显示新的矩形 Private Sub btnDraw_Click(sender As Object, e As EventArgs) Handles btnDraw.Click RandomBox() End Sub Public Sub RandomBox() Dim r As New Rectangle(CInt(Rnd() * picGene.Width), CInt(Rnd() * picGe

我试图在一个图片盒上创建一个大小和位置随机的矩形。每次用户单击按钮时,矩形将被删除,并显示新的矩形

Private Sub btnDraw_Click(sender As Object, e As EventArgs) Handles btnDraw.Click
  RandomBox()
End Sub

Public Sub RandomBox()
  Dim r As New Rectangle(CInt(Rnd() * picGene.Width), CInt(Rnd() * picGene.Height), 20 + Rnd() * 50, 10 + Rnd() * 50)
  Dim g As System.Drawing.Graphics
  g = picGene.CreateGraphics()
  g.FillRectangle(Brushes.Blue, r)
End Sub
它总是保持先前绘制的矩形,因此我尝试将picGene.Invalide()放在代码块之前或之后。它删除旧矩形,但不绘制新矩形

Public Sub RandomBox()
  picGene.Invalidate()
  Dim r As New Rectangle(CInt(Rnd() * picGene.Width), CInt(Rnd() * picGene.Height), 20 + Rnd() * 50, 10 + Rnd() * 50)
  Dim g As System.Drawing.Graphics
  g = picGene.CreateGraphics()
  g.FillRectangle(Brushes.Blue, r)
  'picGene.Invalidate()
End Sub
有什么想法吗


谢谢

在内存中存储一个矩形,只需在每次单击时更改该矩形,然后在绘制事件中绘制它。现在,对于随机生成的值,类是一个更好的选择

Private rect As New Rectangle

Private Sub btnDraw_Click(sender As Object, e As EventArgs) Handles btnDraw.Click
  Static rnd As New Random 
  rect = New Rectangle(rnd.Next(picGene.Width), rnd.Next(picGene.Height), 20 + rnd.Next({somevalue}) * 50, 10 + rnd.Next({someValue}) * 50)
  pb.Refresh() 'redraw the rectangle
End Sub

Private Sub picGene_Paint(sender As Object, e As PaintEventArgs) Handles picGene.Paint
  e.Graphics.DrawRectangle(Pens.Black, rect)
End Sub