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で、2番目のパラメーターは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)

コメントで述べたように、エラーを回避するために、このようにペイント イベントを呼び出すことができます。

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

イベント ハンドラPaintEventArgsに渡せるオブジェクトがありません。picturePanel_Paintこのイベント ハンドラーを手動で呼び出したい場合は、新しい PaintEventArgs オブジェクトを作成し、そのプロパティに適切なデータを入力する必要がありますが、これは簡単な作業ではありません。

于 2013-03-06T08:59:52.063 に答える