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 に答える