WinForm在客户端区域移动时不能平稳拖动
本文关键字:不能 拖动 移动 客户端 区域 WinForm | 更新日期: 2023-09-27 17:49:21
每当我在客户端区域通过某些组件(即标签)移动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;
}
这个偏移确实解决了这个问题,但是什么让我陷入一个循环是为什么当我移动它的客户端区域时,表单的位置偏移摆在首位?
谢谢!
您似乎正在将客户端坐标转换为屏幕坐标。有更好的办法……
https://msdn.microsoft.com/en-us/library/system.windows.forms.control.pointtoscreen%28v=vs.110%29.aspx 编辑:当然有更好的方法来做这件事。基本上,你想拦截更高层的点击,并告诉Windows点击实际上是在窗口标题中,这将导致Windows为你执行拖动…Winforms -点击控件的wm_nchest消息