0

我有一个函数,只要调用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 的位置就会变得一团糟。

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

4

2 回答 2

3

是的,这是因为 D+D 事件以屏幕坐标而不是客户端坐标传递鼠标位置。您需要映射相对于文本框父级的位置,如下所示:

 txtBoxDragPoint.Location = txtBoxDragPoint.Parent.PointToClient(new Point(e.X, e.Y));
于 2012-06-22T07:03:59.437 回答
0

坐标确实与屏幕无关。

你可以尝试改变这个:

txtBoxDragPoint.Location = new Point(e.X, e.Y);

为此(假设 DGVLogicSimView 是您悬停的控件的名称)

txtBoxDragPoint.Location = new Point(DGVLogicSimView.Left + e.X, DGVLogicSimView.Top + e.Y);
于 2012-06-22T07:02:28.647 回答