在表单中拖动Ovalshape

时间:2013-12-01 03:02:39

标签: c# mouseevent drag

所以我在表单周围移动Ovalshapes时遇到了一些问题。目标是让圆圈在另外两个圆圈的范围内移动,一个圆圈放在另一个圆圈内,移动圆圈基本上围绕它们移动。

我无法用鼠标移动圆圈。每当我点击并按住圆圈时,圆圈移动到我在圆圈上单击的位置的坐标,这样如果我点击大小为10的椭圆形中间,它会将圆圈的位置设置为(5,5)

这就是我所拥有的:

public partial class Form1 : Form
{

    int smallRadius;
    int largeRadius;
    int movingRadius;
    int distanceFromCenterToLocation;

    bool mouseDown;

    Point movingCenter;
    Point returnPoint;
    public Form1()
    {

        mouseDown = false;
        InitializeComponent();

        smallRadius = (ovalShape1.Right - ovalShape1.Left) / 2;

        largeRadius = (ovalShape2.Right - ovalShape2.Left) / 2;

        Point center = new Point(ovalShape1.Left + smallRadius, ovalShape1.Top + smallRadius);

        ovalShape3.Height = largeRadius - smallRadius;
        ovalShape3.Width = largeRadius - smallRadius;

        movingRadius = (ovalShape3.Right - ovalShape3.Left) / 2;

        ovalShape3.Location = new Point(center.X - (movingRadius), center.Y - largeRadius);

        movingCenter = new Point(ovalShape3.Left + movingRadius, ovalShape3.Top + movingRadius);

        distanceFromCenterToLocation = Convert.ToInt32(Math.Sqrt(Math.Pow(movingRadius, 2.0) + Math.Pow(movingRadius, 2.0)));

        int middleRadius = center.X - movingCenter.X;



    }

    private void ovalShape3_MouseUp(object sender, MouseEventArgs e)
    {
        mouseDown = false;
    }

    private void ovalShape3_MouseDown(object sender, MouseEventArgs e)
    {
        mouseDown = true;
    }

    private void ovalShape3_MouseMove(object sender, MouseEventArgs e)
    {
        if (mouseDown)
        {
            ovalShape3.Location = e.Location;
        }
    }

}

1 个答案:

答案 0 :(得分:0)

出于某种原因,OvalShape不是来自Control,并且不像控件那样。

  • 当控件收到鼠标事件时,Location的{​​{1}}属性保存相对于表单左上角的坐标。然而,形状相对于它们自己的左上角接收坐标。

  • 当在控件上按下鼠标按钮时,它将捕获鼠标,以便后续事件发送到同一控件,直​​到您释放按钮。无论是否按下鼠标按钮,如果鼠标位于形状上,形状仅接收鼠标事件。将鼠标移动到顶部或左侧后,形状不会接收任何鼠标事件。因此,形状不会跟随鼠标,也不会处理MouseEventArgs事件。

表单中的所有形状都嵌入在ShapeContainer类型的单个控件中。在Visual Studio设计器中向表单添加形状时,会自动创建此项。要获得预期的行为,您需要找到MouseUp(可能称为ShapeContainer)并处理其鼠标事件:

shapeContainer1