2012-06-22 3 views
0

J'ai une fonction qui définit l'emplacement d'une certaine zone de texte à l'emplacement du curseur de la souris lorsque l'événement de dragover est appelé.L'emplacement du curseur de la souris désactive le changement de forme

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; 
} 

L'événement ci-dessus fonctionne parfaitement lorsque le formulaire est maximisé. Cependant, lorsque le formulaire n'est pas maximisé et situé quelque part au hasard dans le bureau, l'emplacement de txtbox devient tout foiré.

Je crois qu'il retourne l'emplacement de la souris par rapport à la forme, pas à l'écran. Quelle est la meilleure solution pour cela?

Répondre

3

Oui, c'est parce que les événements D + D fournissent la position de la souris dans les coordonnées de l'écran, pas dans les coordonnées du client. Vous devez mapper la position par rapport au parent de la zone de texte, comme ceci:

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

Les coordonnées ne sont en effet pas relatives à l'écran.

Vous pouvez essayer de le changer:

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

à (en supposant DGVLogicSimView est le nom de la commande que vous en vol stationnaire)

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