鼠标光标位置在窗体调整大小时搞砸了

时间:2012-06-22 06:56:35

标签: c# .net winforms mouse

我有一个函数,只要调用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位置会全部搞乱。

我相信它会返回相对于表单的鼠标位置,而不是屏幕。对此最好的解决方案是什么?

2 个答案:

答案 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);