PictureBox1.Invalidate()とrefresh()は全く同じものと
考えてよいのですか、おしえてください。
> 全く同じものと考えてよいのですか
別物ですので、それぞれを適切に使い分ける必要があります。
【Invalidate メソッド】は、再描画を要請するためのメソッドです。
これを呼び出すと、その後で Paint イベント等が発生し、
そこで実際の描画処理がおこなれるという流れになっています。
しかし、Invalidate を 10回呼んだからと言って、実際の再描画処理が
10 回発生するというわけではありません。
すべての再描画処理を受け入れてしまうと、処理が追いつかなくなってしまいますし、
同じ内容を複数回描画しても意味が無いため、OS 側で適当に間引いて処理されます。
実際に再描画される前に、再度 Invalidate が続けて呼ばれた場合、
再描画処理は 1 回分しか発生しない事が多いです。
さて、次に説明するべきは、【Update メソッド】です。
こちらは、実際に再描画を行わせるためのメソッドです。
先ほどとは異なり、こちらの処理は間引かれる事無く、強制的に再描画が行われます。
ただし、そもそも PictureBox 自体が再描画を必要としていない場合には、
実際には何も行われません。
「再描画が必要ならば、[強制的に]再描画を行う」けれども、
「再描画が必要とされないのであれば何もしない」という動作です。
そして【Refresh メソッド】。これは、Invalidate + Update の組み合わせを意味します。
つまり、まず Invalidate メソッドを呼び出して“再描画が必要な状態”という事にしてから、
Update メソッドを使って、それを強制的に描画させるという物です。
この場合、呼び出した回数だけ確実に再描画が発生します。
ただし、本来 OS 側で制御される再描画のタイミングを、プログラム側で
制御する事になるため、むやみに呼ぶとパフォーマンスを悪化させる事になります。
良くわかりました。有り難うございます。
ツイート | ![]() |