所以我在表单周围移动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;
}
}
}
答案 0 :(得分:0)
出于某种原因,OvalShape
不是来自Control
,并且不像控件那样。
当控件收到鼠标事件时,Location
的{{1}}属性保存相对于表单左上角的坐标。然而,形状相对于它们自己的左上角接收坐标。
当在控件上按下鼠标按钮时,它将捕获鼠标,以便后续事件发送到同一控件,直到您释放按钮。无论是否按下鼠标按钮,如果鼠标位于形状上,形状仅接收鼠标事件。将鼠标移动到顶部或左侧后,形状不会接收任何鼠标事件。因此,形状不会跟随鼠标,也不会处理MouseEventArgs
事件。
表单中的所有形状都嵌入在ShapeContainer
类型的单个控件中。在Visual Studio设计器中向表单添加形状时,会自动创建此项。要获得预期的行为,您需要找到MouseUp
(可能称为ShapeContainer
)并处理其鼠标事件:
shapeContainer1