2013-03-06 92 views
1

我有這個event handlerMainform.vb調用picturePanel_Paint事件處理

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 

從一個私有方法updateViewMainform.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

+0

你爲什麼要手動調用它? – VladL 2013-03-06 08:38:12

+0

'刷新'是做這件事的正確方法,但我肯定可以手動調用事件 - 只是想知道出於興趣。 – whytheq 2013-03-06 08:47:08

回答

2

你沒有在picture box's paint event使用sender/e對象,所以通過手動調用它,不會有任何問題(不影響您的代碼)。如果你手動調用它,那麼它就像一個簡單的procedure調用。

使用follwing片段來實現你的結果,

call picturePanel_Paint(New Object,New PaintEventArgs) 

注:

  • 這是不是一個好的做法可言,.REFRESH()也將調用相同。
  • sender/e如果您在手動呼叫期間沒有手動設置其屬性 ,則不會有任何結果。

編輯:​​

你可以這樣調用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

+0

+1感謝您的解決方案 - 和警告! - 最好我堅持'ReFresh' – whytheq 2013-03-06 09:43:56

+0

這對我不起作用 - 我已經用這個實現的結果修改了OP – whytheq 2013-03-07 08:09:21

+0

@whytheq結果是什麼?有沒有提出任何錯誤? – 2013-03-07 09:13:45

1

沒有對象準備爲PaintEventArgs傳遞給picturePanel_Paint事件處理程序。如果你真的想手動調用此事件處理程序,您必須創建新的PaintEventArgs的對象,並填寫它的屬性與正確的數據,這不是一件容易的事

+0

+1謝謝 - 很高興知道有時這是一個相當簡單的操作,調用一個事件過程,但有時候,像這裏一樣,它是非試用的! – whytheq 2013-03-06 09:43:18