我在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
修改
以下手动调用事件的尝试失败:
答案 0 :(得分:2)
您没有使用sender/e
中的picture box's paint event
个对象,因此,通过手动调用它将没有问题(没有任何内容会影响您的代码)。如果您手动调用它,那么它就像一个简单的procedure
调用。
使用以下片段获得结果,
call picturePanel_Paint(New Object,New PaintEventArgs)
注意:
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对象并用适当的数据填充它的属性,这不是一件容易的事情