DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DrawStringメソッドで描画した文字列をクリアーするには?

環境/言語:[VB.NET .NET Framework 3.5]
分類:[.NET]

System.Drawing名前空間のGraphicsクラスのメソッドでPictureBoxに描画できます。
GraphicsクラスのDrawImageメソッドでPictureBoxに描画したものはPicutreBoxのImageプロパティにNothingを設定するとクリアーされますが、DrawStringやDrawRectangleメソッドで描画したものはクリアーされません。
PictureBoxのBackColorでPictureBoxを塗りつぶすと一応はクリアーされますが、BackColorを変える、と消えていなくて、再表示されます。
DrawStringメソッドやDrawRectangleメソッドで描画したものをクリアーするのは可能でしょうか?
どのように描いているのでしょうか?
一般的に Windows において、描いたものを取り消すことはできません。
そのように見せるためには、背景で塗りつぶして残さないといけない文字列や矩形、線などを描き直さないといけません。

CreateGraphics で差分を描いているだけなのであれば、DrawString/DrawRectangle をなかったものにするためには、背景で塗りつぶす処理が自分で必要です。Graphics.Clear あたりでもよいでしょう。

Paint イベントで描くやり方の場合は、背景が勝手に塗りつぶされた後に、自分で DrawString/DrawRectangle を Paint イベントで呼んだいたはずです。Invalidate メソッドを呼んで次の Paint イベントを発生させ、そのときにいらない DrawString/DrawRectangle をスキップ(呼ばない)ようにすればよいでしょう。
間違っても、Paint イベントで Invalidaite メソッドは呼ばないでくださいね。
■No30002に返信(Azuleanさんの記事)
Azulean様
ご回答ありがとうございます。
描画したものを部分的に取り消すことはできなことが分かりした。
PictureBoxのImageプロパティにNothingを設定(あるいはClearメソッドでの塗りつぶし)してもDrawStringメソッドで描画したものが残るとしたのは私の勘違いでした。

> どのように描いているのでしょうか?

画像のコピーをしようとしていて、疑問があったので投稿しました。
本件はこれで解決ですが、目的の画像のコピーについては、実現できていないので別の記事として投稿させていただきます。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板