アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

申し訳ありません宜しくお願いします。

A 回答 (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は、たぶんモジュールレベル以上の
アクセスレベルのほうが使いやすいでしょうね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/02/27 15:37

こんいちは、



http://homepage1.nifty.com/rucio/main/main.htm

このページに、基本的なことがいろいろ書いています。

描画についても、上記のURLの以下のURLに
詳細に書いています。
http://homepage1.nifty.com/rucio/main/dotnet/sho …

読んでみてください。
    • good
    • 0
この回答へのお礼

ありがとうございます

お礼日時:2007/02/27 15:37

どのタイミングで描画されているのでしょうか?


pboxのPaintイベントで描画してみましょう。
    • good
    • 0
この回答へのお礼

ありがとうございます

お礼日時:2007/02/27 15:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!