DOBON.NET DOBON.NETプログラミング掲示板過去ログ

FillEllipseで書いた後

環境/言語:[WindosXP,VB2005]
分類:[.NET]

PictureboxにFillEllipseで楕円を書いた後キー入力されたら楕円を移動したいのですが移動するときに今の楕円を消して新しい座標に楕円を書くようにするには
どのような手法があるでしょうか。
(Pictureboxの背景は座標軸が格子でかいてあります。楕円を消すときに
格子は消したくないのですが)

VB2005,WindosXP
■No18029に返信(totoさんの記事)

こんばんは エツです。

1.Pictureboxと同じ大きさのビットマップを準備しPictureboxの背景(消したくない画像)をビットマップに描画し、
  Pictureboxのimage に設定する

2.楕円をPicturebox.Paint で描画し、移動するときは再描画する。

簡単なサンプルを上げます。
フォームにPicturebox とボタンを3つ配置します。
ボタン1は背景をビットマップに描画しPictureboxのimage に設定する。
ボタン2は楕円を書く
ボタン3は楕円を移動
変数Crectは楕円の位置と大きさを保持する変数


-------以下サンプル-------

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'ビットマップに座標を引きPictureBox1に関連させる
        PictureBox1.BackColor = Color.White
        Dim bm As New Bitmap(PictureBox1.Size.Width, PictureBox1.Size.Height)
        Dim g As Graphics = Graphics.FromImage(bm)
        For i As Integer = 1 To 9
            Dim dxy As Single = 1 / 10
            g.DrawLine(Pens.Gray, 0, i * bm.Size.Height * dxy, bm.Width, i * bm.Size.Height * dxy)
            g.DrawLine(Pens.Gray, i * bm.Size.Width * dxy, 0, i * bm.Size.Width * dxy, bm.Height)
        Next
        PictureBox1.Image = bm
        g.Dispose()
    End Sub

'--------------------------
    '円の座標を保持
    Private Crect As RectangleF = Nothing

'--------------------------
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        'PictureBox1に円を書く
        Crect = New RectangleF(10, 10, 50, 50)
        PictureBox1.Invalidate()
        PictureBox1.Update()
    End Sub

'--------------------------

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        'PictureBox1の円を移動する
        Crect = New RectangleF(Crect.X + 10, Crect.Y + 10, Crect.Width, Crect.Height)
        PictureBox1.Invalidate()
        PictureBox1.Update()
    End Sub

'--------------------------

    Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
        If Crect = Nothing Then Exit Sub
        Dim g As Graphics = e.Graphics
        g.FillEllipse(Brushes.Blue, Crect)
    End Sub
うまくいきました。
プログラムまで書いていただきありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板