Visual Basic 中学校 掲示板
投稿内容
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
>
投稿一覧
>
PictureBoxの描画内容を消去し、他操作で再び再描画したい
タグの編集...
投稿者
カフェオレ
 (社会人)   投稿日時
2021/12/16 09:52:07
おはようございます。現在、私がつまずいているVB.NETプログラムの問題で質問させてください。
やりたい仕様を記載します。
①Form1上にPictureBox1を配置し、図形の描画を行います。
Privare
Sub
Form1_Load(sender
As
Object
, e
As
EventArgs)
Handles
MyBase
.Load
PictureBox1.Image =
New
Bitmap(PictureBox1.Width, PictureBox1.Height)
Using
g
As
Graphics = Graphics.FromImage(PictureBox1.Image)
g.DrawLine(Pen,X1,Y1,X2,Y2)
End
Using
End
Sub
②Form1上にボタンを1つ配置し、ボタンを押すとPictureBox1の描画内容を消去(初期化)し、新たに
他の図形を描画する。
Private
Sub
Button1_Click(sender
As
Object
, e
As
EventArgs)
Handles
Button1.Click
Me
.PictureBox1.Image =
Nothing
Using
g
As
Graphics = Graphics.FromImage(PictureBox1.Image)
g.DrawLine(Pen,X3,Y3,X4,Y4)
End
Using
End
Sub
この②でPictureBox1の描画を消去する際のNothingを代入する部分で、例外エラー「値をNullにすることができません」が発生します。
そもそもNothingを代入して消去する方法が正しいのかもいまいち分かっておりません。そこで、PictureBoxの描画内容を消去(初期化)する方法、また再描画する方法をお知りでしたら回答をお願いします。。
投稿者
魔界の仮面弁士
 (社会人)   投稿日時
2021/12/16 10:15:13
Bitmap は、絵を描くためのキャンバスや画用紙に相当します。
Graphics は、そこに絵を描くための画材道具(筆や絵の具など)に相当します。
Form1_Load のタイミングでは、新しい画用紙を購入して、PictureBox1 に貼り付け、
そこに絵を描きました。
Button1_Click のタイミングでは、PictureBox1 から画用紙を剥がしたのに、
存在しない紙に描こうとして、「おいおい、どこに描く気なんだい?」と
NullReferenceException が発生する事になります。
対策としては、
(案1) 新しい画用紙をもう一つ用意して、そこに描く
(案2) 前の紙は剥がさず、Clear メソッド等でクリアして再利用する
などの方法があります。
案1 を採用した場合は、剥がした画用紙をそこらに放り出さず、
不要になった紙をゴミ箱に入れる作業(Dispose メソッドの呼び出し)も記述しましょう。