我有一个函数,只要调用dragover事件,就会将某个文本框的位置设置为鼠标光标的位置。
private void DGVLogicSimView_DragOver(object sender, DragEventArgs e)
{
txtBoxDragPoint.Visible = true;
txtBoxDragPoint.BackColor = Color.LightSkyBlue;
txtBoxDragPoint.Location = new Point(e.X, e.Y);
e.Effect = DragDropEffects.Copy;
}
当表单最大化时,上述事件非常有效。但是,当表单未最大化并位于桌面中的某个随机位置时,txtbox位置会全部搞乱。
我相信它会返回相对于表单的鼠标位置,而不是屏幕。对此最好的解决方案是什么?
答案 0 :(得分:3)
是的,那是因为D + D事件在屏幕坐标中传递鼠标位置,而不是在客户端坐标中。您需要映射相对于文本框'父级的位置,如下所示:
txtBoxDragPoint.Location = txtBoxDragPoint.Parent.PointToClient(new Point(e.X, e.Y));
答案 1 :(得分:0)
坐标确实不是屏幕相关的。
您可以尝试更改此内容:
txtBoxDragPoint.Location = new Point(e.X, e.Y);
到此(假设DGVLogicSimView是您正在悬停的控件的名称)
txtBoxDragPoint.Location = new Point(DGVLogicSimView.Left + e.X, DGVLogicSimView.Top + e.Y);