ここから本文です

解決済みの質問

知恵コレに追加する

vb2005でラインが消える

abituniasoさん

vb2005でラインが消える

お世話になります。
vb2005 Pro なのですが、フォームにボタンが1つあって、そのボタンを押すとラインがされます。
コードは以下の通りです。

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim g As System.Drawing.Graphics

g = Me.CreateGraphics
g.DrawLine(Pens.Black, 0, 0, 100, 100)
g.Dispose()

End Sub

End Class


これを実行すると、ボタンを押した後にラインが描画されるのですが、なぜかTabキーまたはAltキーを押すと、ラインが消えてしまいます。

どなたか原因がお解りになる方はいらっしゃいませんでしょうか。

よろしくお願い致します。

違反報告

ベストアンサーに選ばれた回答

ttkai00さん

※まず他の回答者さんの回答に関して

Graphics は描画に使用するためのものであって、描画された線ではありません。Dispose しても線が消えるようなことはありません。それどころか、CreateGraphics で作成した Graphics は責任をもって Dispose しなくてはなりませんので、Dispose は必要です。

MSDN にもこのことは明記されています

http://msdn.microsoft.com/ja-jp/library/system.windows.forms.contro...


以下、本題です。

CreateGraphics で Graphics を取得して描画したものはあくまで一時的なものに過ぎません。フォームが再描画されると消えてしまいます。Alt キー や Tab キーもそうですが、最小化して最大化しただけでも消えてしまうでしょう。

ずっと残しておきたいのなら、再描画のときに実行される Paint イベントで描画する必要があります。フォームクラスから描画するのなら、OnPaint をオーバーライドすればよいです

Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
MyBase.OnPaint(e)
e.Graphics.DrawLine(Pens.Black, 0, 0, 100, 100)
End Sub

ただ、これだと Button1 を押さなくても描画されてしまうでしょうから、そのあたりはフラグ等を用いて制御しましょう。まとめるとこんな感じ

Private lineVisible As Boolean

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.lineVisible = True
Me.Refresh()
End Sub

Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
MyBase.OnPaint(e)
If Me.lineVisible Then
e.Graphics.DrawLine(Pens.Black, 0, 0, 100, 100)
End If
End Sub

この質問・回答は役に立ちましたか?
はい
いいえ

お役立ち度:お役立ち度 0点(5点満点中)0人中 0人が役に立つと評価しています。

ベストアンサー以外の回答

1件中11件)

 

fit_dynamite_mugenさん

>g.Dispose()

Disposeしちゃ消えちゃうでしょ。

回答ありがとうキャンペーン 回答してポイントを当てよう!! 2000名様に500ポイントプレゼント キャンペーンの詳細を見る ※回答することで自動的に応募となります。

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。

お客様自身の責任と判断で、ご利用ください。

ただいまの回答者

20時31分現在

3037
人が回答!!

1時間以内に6,284件の回答が寄せられています。