1

我正在尝试完成一个项目,在该项目中,通过鼠标单击,从单击位置作为中心点绘制 200 个圆圈,从 1 半径增大到 200。

我不需要这个程序的鼠标部分的帮助。

我目前的障碍是,虽然在以前的 VB 版本中有圆方法,但 VB.NET 只使用 System.CreateGraphics.DrawEllipse 方法来创建圆,并且该方法使用 x 和 y 坐标作为起始位置一个不可见矩形的左上角,并使用另外两个整数/单数来确定向右和向下的距离(x + 和 y +)来确定圆的大小和位置。

我希望我只是想念一个内置的方法来使用中心点创建一个圆/省略号并声明该中心点的半径以完成我的程序。

有没有办法使用中心点作为参考点在 FORM 上画一个圆,然后声明半径?

4

3 回答 3

2

本质上,您唯一需要做的就是用半径减小点的XY值,并使用半径 * 2 作为宽度和高度:

graphics.DrawEllipse(
    pen, location.X - radius, location.Y - radius, radius * 2, radius * 2)

鉴于此,很容易制作一个扩展方法,为您提供您正在寻找的界面:

Imports System.Runtime.CompilerServices

Module GraphicsExtensions

    <Extension()>
    Public Sub DrawCircle(ByVal graphics As Graphics, pen As Pen, location As Point, radius As Integer)
        graphics.DrawEllipse(
            pen, location.X - radius, location.Y - radius, radius * 2, radius * 2)
    End Sub

End Module

...并以您的形式使用它:

Dim pos As Point = Me.PointToClient(MousePosition)

Using g As Graphics = Me.CreateGraphics()
    g.DrawCircle(Pens.Black, pos, 15)
End Using
于 2013-11-21T07:45:02.983 回答
1

我希望我只是想念一个内置的方法来使用中心点创建一个圆/省略号并声明该中心点的半径以完成我的程序。

有没有办法使用中心点作为参考点在 FORM 上画一个圆,然后声明半径?

当然,只需在该点创建一个大小为 (1,1) 的 Rectangle() 并重复调用 Inflate() 方法:

矩形.Inflate()

Public Class Form1

    Private Center As Point
    Private MouseClicked As Boolean = False

    Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles MyBase.MouseDown
        If e.Button = Windows.Forms.MouseButtons.Left Then
            MouseClicked = True
            Center = New Point(e.X, e.Y)
            Me.Refresh()
        End If
    End Sub

    Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
        If MouseClicked Then
            Dim rc As New Rectangle(Center, New Size(1, 1))
            For i As Integer = 1 To 200
                e.Graphics.DrawEllipse(Pens.Black, rc)
                rc.Inflate(1, 1)
            Next
        End If
    End Sub

End Class
于 2013-11-21T08:02:36.643 回答
0

如果您有中心点和半径,那么您可以轻松计算角点。以下内容可能对您有所帮助。

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    Dim centerX, centerY As Integer
    Dim cornerX, cornerY As Integer
    Dim radius As Integer

    centerX = 100
    centerY = 100
    Dim i As Integer
    For i = 20 To 200 Step 20
        radius = i
        cornerX = centerX - radius / 2
        cornerY = centerY - radius / 2

        e.Graphics.DrawEllipse(Pens.Black, cornerX, cornerY, radius, radius)
    Next

End Sub
于 2013-11-21T07:46:13.433 回答