• ベストアンサー

DrawLineで引いた線が消えてしまいます。

お伺いしたい事があります visual basic 2005 なのですが、 picture box にdrawlineで線を引き、他のフォームが前面に来て、 ドラッグするとラインが消えてしまいます .Invalidated、 .over等を試したのですが、うまくいきませんでした。 再描画するタイミングを取得する方法としてどの様な方法があるのでしょうか? それとも、 Dim canvs As Graphics = pbox.CreateGraphics() canvs.DrawLine( 以外で描画するのでしょうか? 申し訳ありません宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

方法は(私が知る限り)2つあります。 ・(可能であれば)Paintイベントで再描画 この方法の場合、描画の情報(どんな線をどこに引いたか、等)を保持しておくか、または 何らかの方法で再現できる(元々、(ユーザが引いた線でない)プログラムのみで 引いた線である、とか) 必要があります。 やり方は、Paintイベントプロシージャにて無理矢理、再度線を引くだけですが、 ユーザがフリーで描画する場合は再現が難しいですし、線が多いと重くなるので 一般的には、あまり有効でないと思います。 (単純な描画なら、コーディングも楽なので手っ取り早いですが) ・内部的にビットマップを用意して、それに描画して、そのビットマップを  PictureBox.Imageに設定 この方法なら、描画の最新情報を(内部ビットマップに)残しておける上に、 わざわざPaintイベントで再描画等する必要も無いので、より汎用的だと思います。 「ビットマップに直接描画する」のが、多少面倒になるかもしれませんが、 まぁ大した事ではないでしょう。 Dim bmp As New Bitmap(x, y) Dim gr As Graphics = Graphics.FromImage(bmp) (ここで描画) PictureBox.Image = bmp …みたいな感じですかね。 細かいことですがbmpとgrは、たぶんモジュールレベル以上の アクセスレベルのほうが使いやすいでしょうね。

psychesine
質問者

お礼

ありがとうございます >Dim bmp As New Bitmap(x, y) >Dim gr As Graphics = Graphics.FromImage(bmp) >(ここで描画) >PictureBox.Image = bmp で解決できました

その他の回答 (2)

  • tom11
  • ベストアンサー率53% (134/251)
回答No.2

こんいちは、 http://homepage1.nifty.com/rucio/main/main.htm このページに、基本的なことがいろいろ書いています。 描画についても、上記のURLの以下のURLに 詳細に書いています。 http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard2.htm 読んでみてください。

psychesine
質問者

お礼

ありがとうございます

  • unamana19
  • ベストアンサー率62% (56/89)
回答No.1

どのタイミングで描画されているのでしょうか? pboxのPaintイベントで描画してみましょう。

psychesine
質問者

お礼

ありがとうございます

関連するQ&A