タイトル : Re: 何とか解決できたと思います。 投稿日 : 2008/10/20(Mon) 16:50 投稿者 : 魔界の仮面弁士
できましたね、おめでとうございます。 が。あともう一歩。 > Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Me.MouseUp > Dim g As Graphics = Me.CreateGraphics > g.DrawLine(Pens.Red, startX, startY, e.X, e.Y) > End Sub これはマズイです。Graphics の後始末が行われていませんので。 『作成した Graphics の使用後は、それを作成元が責任を持って破棄せねばならない』 という仕様になっているため、実際には上記は、 Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Me.MouseUp Using g As Graphics = Me.CreateGraphics g.DrawLine(Pens.Red, startX, startY, e.X, e.Y) End Using End Sub のように記述する必要があります。 (Using ブロックを使うことで、使用後に破棄されるようになります) それから、CreateGraphics に描画した内容というのは、別のフォームが重なったり、 フォームを最小化したりすると容易に消えてしまうため、あまり推奨できる描画方法では ありません。(これは VB6 でいえば、AutoRedraw = False の状態だと思ってください) 一度描いた線を継続的に表示しておきたい場合には、No.8317 にて回答したように 描画処理を「Paint イベント」の e.Graphics にて行うようにすれば OK です。 (この点は、VB6 の Paint イベントの仕組みと同様です) なお Paint イベントの e.Graphics は、自分で『作成』したものではないため、こちらは Using 等による「破棄」を行う必要が無い(破棄してはいけない)点に注意してください。 |