2012-06-22 90 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);