如何选择一个圆圈,将其拖放到Windows窗体中的另一个位置?

Sug*_*n88 3 .net c# winforms

我正在开发一个Windows窗体应用程序.当我单击表单上的任何位置时,使用Graphics.DrawEllipse方法绘制一个小圆圈.我目前将圆圈的中心点存储在列表中,以检查我点击的点是否位于圆圈内.如何选择圆圈,将其拖放到表单中的其他位置?

任何帮助赞赏

Sri*_*vel 5

由于您没有提供代码,我们无法修复您的代码.相反,我提供了一个简单的工作方式,你可以画一个圆圈并移动它.

private readonly List<Circle> circles = new List<Circle>();
private Circle selectedCircle = null;

protected override void OnMouseDown(MouseEventArgs e)
{
    Circle hitCircle = circles.FirstOrDefault(x => x.Bounds.Contains(e.Location));
    if (hitCircle == null)
    {
        circles.Add(new Circle { Bounds = new Rectangle(e.Location, new Size(50, 50)) });
        this.Invalidate();
        selectedCircle = null;
    }
    else
    {
        selectedCircle = hitCircle;
    }

    base.OnMouseDown(e);
}

protected override void OnMouseMove(MouseEventArgs e)
{
    if (selectedCircle != null && e.Button == MouseButtons.Left)
    {
        selectedCircle.Move(e.Location);
        this.Invalidate();
    }
    base.OnMouseMove(e);
}

protected override void OnPaint(PaintEventArgs e)
{
    foreach (var circle in circles)
    {
        e.Graphics.DrawEllipse(Pens.Black, circle.Bounds);
    }

    base.OnPaint(e);
}

public class Circle
{
    public Rectangle Bounds { get; set; }

    public void Move(Point currentMousePoint)
    {
        Bounds = new Rectangle(currentMousePoint, Bounds.Size);
    }
}
Run Code Online (Sandbox Code Playgroud)

这个片段可以让你知道.我确信您可以修改代码以进行更改以满足您的要求.

如果您在下方没有圆圈时单击表单,此代码将创建新圆圈,如果已存在圆圈,则会选择它.移动鼠标实际上会移动圆圈.

注意:此代码应放在派生类中Control.base关键字是指ControlForm或其他什么.