1

我有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.vbMe.picturePanelPaintEventArgs

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

编辑

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

在此处输入图像描述

4

2 回答 2

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

于 2013-03-06T09:29:49.717 回答
1

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

于 2013-03-06T08:59:52.063 回答