每当我通过客户区中的某个组件(即标签)移动Windows窗体时,我最终会得到一个奇怪的鼠标偏移,其中窗体不会在光标下方保持可视。它仍将根据我在屏幕上的鼠标位置移动,但它会在光标位置的东南方向显着移动。
我必须指定我自己的负偏移来抵消这种偏移;我的代码如下:
private void component_MouseDown(object sender, MouseEventArgs e)
{
if (sender is Label)
{
if (e.Button == MouseButtons.Left)
{
mouseLoc = new Point(-(e.X + OFFSET_X), -(e.Y + OFFSET_Y));
isMouseDown = true;
}
}
}
private void component_MouseMove(object sender, MouseEventArgs e)
{
if (isTitleLabelMouseDown)
{
Point p = Control.MousePosition;
p.Offset(mouseLoc);
Location = p;
}
}
private void component_MouseUp(object sender, MouseEventArgs e)
{
isMouseDown = false;
}
这个偏移确实解决了这个问题,但是什么引发了我的循环,这就是为什么当我首先通过客户区移动它时,表单的位置偏移?
谢谢!
答案 0 :(得分:0)
您似乎正在将客户端坐标转换为屏幕坐标。还有更好的方法......
编辑:当然,有更好的方法来做这件事。基本上,你想拦截链上方的点击并告诉Windows点击实际上是在窗口标题中,这将导致Windows为你拖动...