画面に直線(最終的には矢印なども書きたい)を入れたいため、以下のページの内容を参考に、
PictureBoxに直線を描こうとしています。
http://dobon.net/vb/dotnet/graphics/drawline.html
そこで、サンプルを参考にし、フォームロードのイベントに以下のようなコードを入れてみました。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Graphicsオブジェクトの作成
Dim g As Graphics = PictureBox1.CreateGraphics()
'(0,0)-(100,100)に、幅1の黒い線を引く
g.DrawLine(Pens.Black, 0, 0, 100, 100)
'リソースを開放する
g.Dispose()
End Sub
しかし、さっぱり直線は表示されません。
試しに、ボタンクリックのイベントで上記コードを書くとちゃんと直線が表示されます。
また、フォームを最小化して、再びフォームを表示させると、描かれた直線がまた消えてしまいます。
そこでですが、
・PictureBoxに直線を描画された状態でフォームを表示させるには?
・フォームを再度表示させた時にPictureBoxに直線を描画されたままにするには?
について教えていただけないでしょうか?
宜しくお願いします。
ちなみにバージョンはVB2008です。
宜しくお願いします。
Paintイベント内で描画しましょう。
編集 削除以前同様質問があったときの回答方法で回避できます。
Dim b As New Bitmap( _
Me.PictureBox1.Width, Me.PictureBox1.Height)
Dim g As Graphics = Graphics.FromImage(b)
Me.PictureBox1.Image = b
'(0,0)-(100,100)に、幅1の黒い線を引く
g.DrawLine(Pens.Black, 0, 0, 100, 100)
'リソースを開放する
g.Dispose()
.CreateGraphics() があまりよくないようですね。
>CreateGraphics() があまりよくないようですね。
よくないってどういう意味でしょう?
よくないんならボタンクリックでもPaintイベントでも
良くないということに?
再描画されてるのを理解してないだけでは?
フォームロード時は画面は表示されていないのですから
そこで命令すること自体が間違いです。
対策としては
・再描画のたびに自前のコードで描画する。
もしくは
・PictureBox に画像を覚えてもらって再描画してもらう。
となり、既に回答された内容になります。
回答内容がよくないという指摘なら理由も書込むように
お願いします。
>よくないってどういう意味でしょう?
今回の場合は、
CreateしてDisposeしているからです。