投稿者 るきお  (社会人) 投稿日時 2018/6/6 08:16:24
ゆうさくさんのプログラムがうまく動かない理由が不正確でしたので補足します。
(ゆうさくさんのプログラムではなく、私が少しいじってみたプログラムをもとに書いてしまいました。)

ゆうさくさんのプログラムがエラーになら直接的な理由は型変換ができないからです。

Form1_Paintの第2引数はPaintEventArgs型です。

Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint

ゆうさくさんはこれを下記のように呼び出そうとしています。

Call Form1_Paint(Me, EventArgs.Empty)

この第2引数はEventArgs型です。

EventArgs型からPaintEventArgs型への型変換は定義されていないためエラーになります。

一般的に、型Aから型Bに変換をする場合、
型Aと型Bが異なっていても、下記の場合成功します。
・型Bが型Aの基底クラスの場合。
・型Bが型Aが実装しているインターフェースの場合。

例外として特別に型変換がプログラムされている場合(=CTypeがオーバーロードされている場合)も型変換は成功します。

今回はこのどれでもないので失敗します。

次のプログラムで確認できます。
Dim typeA As EventArgs = EventArgs.Empty
Dim typeB As PaintEventArgs = Nothing

typeB = typeA


ちなみに Nothing は必ず代入できるので、
Call Form1_Paint(Me, Nothing)
ならば呼び出す自体は可能です。