调用picturePanel_Paint事件处理程序

时间:2013-03-06 08:33:08

标签: vb.net

我在event handler中有Mainform.vb

Private Sub picturePanel_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles picturePanel.Paint
    If fBitmap IsNot Nothing Then
        g = picturePanel.CreateGraphics()
        g.DrawImage(fBitmap, 0, 0)
        g.Dispose()
    End If
End Sub

来自updateView中的私有方法Mainform.vb我试图调用此处理程序,但有点不确定参数 - 我假设第一个只是Me.picturePanel而第二个参数必须与PaintEventArgs

有关
Private Sub updateView()
    'picturePanel.Refresh() '<<<<<<<<<this is fine but thought the following might work...
    picturePanel_Paint(Me.picturePanel, PaintEventArgs)
End Sub

修改

以下手动调用事件的尝试失败:

enter image description here

2 个答案:

答案 0 :(得分:2)

您没有使用sender/e中的picture box's paint event个对象,因此,通过手动调用它将没有问题(没有任何内容会影响您的代码)。如果您手动调用它,那么它就像一个简单的procedure调用。

使用以下片段获得结果,

call picturePanel_Paint(New Object,New PaintEventArgs)

注意:

  • 这根本不是一个好习惯,。refresh()也会调用它。
  • 如果您未手动设置其属性,则
  • sender/e将无效 在手动通话期间。

编辑: Summary(Bug Fixed and New solution added)

你可以像这样调用paint事件来避免你在评论中提到的错误

call picturePanel_Paint(New Object, New PaintEventArgs(picturePanel.CreateGraphics, New Rectangle))

但是,以下编码方式将是一种符合您要求的简洁方式,

Private Sub picturePanel_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles picturePanel.Paint
   call PerformSomething()
End Sub

private sub PerformSomething()
  'Your code Here
End Sub

拨打procedure PerformSomething,呼叫paint event

答案 1 :(得分:1)

没有对象准备好作为PaintEventArgs传递给picturePanel_Paint事件处理程序。如果你真的想手动调用这个事件处理程序,你将不得不创建新的PaintEventArgs对象并用适当的数据填充它的属性,这不是一件容易的事情