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 メソッドの呼び出し)も記述しましょう。