円を描画するには?

解決


K  2010-01-31 00:47:34  No: 143167  IP: [192.*.*.*]

現在、大学の課題でペイントソフトのようなプログラムを作っています。
でも、円を描画する機能をつけたいのですが、どうも出来ません。

MouseMoveの時に軌跡を残すのは、まだ難しいのでやらなくていいとの事。
教授曰く、DrawModeで0=消しゴム・1=鉛筆・2=丸と区別したらいいとおっしゃっていたのですが、それぞれの所にDim DrawMode As Integer = 1などと宣言しても出来ません。↓MouseDown・MouseMove・MouseUpの部分。

 Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
        DrawFlag = True '旗を揚げる
        X = e.X
        Y = e.Y
    End Sub
    Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
        If DrawFlag = True Then 'DrawMode = 1 & 
            p = New Pen(co, Cdw)
            'いまのXY座標を保存
            g.DrawLine(p, X, Y, e.X, e.Y)
            'PictureBoxを再描画する()
            ' PictureBox1.Invalidate()
            X = e.X : Y = e.Y
        End If
    End Sub

    Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
        DrawFlag = False
        ' If DrawMode = 2 & DrawFlag = True Then
        'p = New Pen(co, Cdw)
        ' g.DrawEllipse(p, X, Y, e.X - X, e.Y - Y)
        'X = e.X : Y = e.Y
        ' g = PictureBox1.CreateGraphics
        ' End If
    End Sub

・・・最後のIf文を消しているのは、入れるとエラーが出るからです。
何が違うのでしょう…??

簡単に言えば、円を描くやり方を教えてはもらえないでしょうか??
お願いします。

編集    削除
マリネ  2010-01-31 05:00:45  No: 143168  IP: [192.*.*.*]

'円のところは、自分で改良出来ますよね?
'comboboxを追加して動かしてみてください。

    Dim Bolder As Integer
    Dim Drawflag As Boolean
    Dim X As Integer
    Dim Y As Integer

    Dim aX As Integer
    Dim aY As Integer

    Dim g As Graphics

    Dim DrawMode As Integer

Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown

        DrawMode = Val(ComboBox1.Text)
        Drawflag = True '旗を揚げる

        X = e.X
        Y = e.Y

        aX = e.X
        aY = e.Y

    End Sub

Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove

        If Drawflag = True Then
            Bolder = 5 '線の太さ
            Dim myPen As New Pen(Color.Black, Bolder)
            Dim myClear As New Pen(PictureBox1.BackColor, 15)

            If DrawMode = 0 Then
                g.DrawLine(myClear, X, Y, e.X, e.Y)

            ElseIf DrawMode = 1 Then
                g.DrawLine(myPen, X, Y, e.X, e.Y)

            ElseIf DrawMode = 2 Then
                g.DrawEllipse(myPen, X, Y, 30, 30)

            End If

            X = e.X
            Y = e.Y

        End If


    End Sub

Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp

        If DrawMode = 2 And Drawflag = True Then
            Dim pPen = New Pen(Color.Red, Bolder)


g.DrawEllipse(pPen, CInt((e.X + aX) / 2), CInt((e.Y + aY) / 2), e.X - aX, e.Y - aY)
'g.DrawEllipse(pPen, aX, aY, e.X - aX, e.Y - aY) 'X - aX, Y - aY)

        End If

        Drawflag = False
    End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ComboBox1.Items.Add("0")
        ComboBox1.Items.Add("1")
        ComboBox1.Items.Add("2")

        g = PictureBox1.CreateGraphics

    End Sub

編集    削除
聖帝  2010-01-31 21:04:21  No: 143169  IP: [192.*.*.*]

質問者さんは本気で作る意思とかありますか?
一応、VisualBasic2008でコードを検証しましたけど。
動きましたよ。(マリネさん)のコードは。
ただ、円を塗りつぶす時は、たとえば、FillEllipseを使う場合はどうします?
型とか宣言とか難しいですか?
一度、入門へ戻って基礎をやり直す方がいいと思います。
それが、1番よい解決だと考えました。

ぼくの発言は「毒入り]ですけど、^^{善人}意見として考えてね。

編集    削除
4824829  2010-02-01 16:29:39  No: 143170  IP: [192.*.*.*]

>作る意思「とか」ありますか?

先生気取りになるならば日本語くらい正しく使いましょうねw

編集    削除
米村  2010-02-01 18:52:45  No: 143171  IP: [192.*.*.*]

>作る意思「とか」ありますか?

普段の会話では、相手の醸し出す雰囲気、仕草、目線、態度、表情など
ノンバーバルな要素が言葉自体を凌ぐほどに影響を与えています。言葉は単語程度でも意思の疎通は可能です。
しかし、相手の姿も表情もみえず、いきおい言葉だけでコミュニケーションをとる場合には、言葉だけが相手を判断する物差しになってしまうのは否めません。
ですから、言葉を大切に使ってほしいと思います

編集    削除
聖帝  2010-02-02 04:04:16  No: 143172  IP: [192.*.*.*]

ま、質問者本人に言われるんなら、それなりだが。
第3者にガタガタ言われる筋合いはないね。
ま、当分の間、休暇だ。

編集    削除
K  2010-02-03 21:07:19  No: 143173  IP: [192.*.*.*]

ちょっと遅くなりましたが、マリネさん、ありがとうございました!
マリネさんの例を入力して、その後、MouseMoveの所の 
ElseIf DrawMode = 2 Then
g.DrawEllipse(myPen, X, Y, 30, 30)
を「'」で隠せば自分が思ったようなものに近いものができました!
あとは色々したい時には自分でちょこっといじってやります。
本当にありがとうございました!!

編集    削除