2012-06-22 57 views
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位置会全部搞乱。

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

回答

3

是的,那是因为d + d事件提供鼠标在屏幕坐标中的位置,而不是在客户端坐标中。您需要将相对于文本框父级的位置映射为:

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

坐标确实不是屏幕相对的。

你可以尝试改变这一点:

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

这个(假设DGVLogicSimView是你盘旋在控件的名称)

txtBoxDragPoint.Location = new Point(DGVLogicSimView.Left + e.X, DGVLogicSimView.Top + e.Y);