comment déplacer une étiquette sur un winform au runtime
Question
en utilisant cet événement l'étiquette disparaît, comment dois-je faire cela?
private void label4_MouseMove(object sender, MouseEventArgs e)
{
label4.Location = new Point(Cursor.Position.X, Cursor.Position.Y);
}
La solution
L'emplacement de label4
est relatif au conteneur ( Form
ou au contrôle parent). La position du curseur peut être relative à l'écran.
Vous devez ajuster l'emplacement. Par exemple, si le conteneur est le Form
, vous pouvez trouver son emplacement à l’écran et calculer l’emplacement du curseur par rapport à l’écran.
Ceci n’est qu’une possibilité pour la cause, mais celle-ci se produit souvent:)
Autres conseils
handle these three event ...
Control actcontrol;
Point preloc;
void label1_Mousedown(object sender, MouseEventArgs e)
{
actcontrol = sender as Control;
preloc = e.Location;
Cursor = Cursors.Default;
}
void label1_MouseMove(object sender, MouseEventArgs e)
{
if (actcontrol == null || actcontrol != sender)
return;
var location = actcontrol.Location;
location.Offset(e.Location.X - preloc.X, e.Location.Y - preloc.Y);
actcontrol.Location = location;
}
void label1_MouseUp(object sender, MouseEventArgs e)
{
actcontrol = null;
Cursor = Cursors.Default;
}
Utilisez la fonction PointToClient () du formulaire pour traduire les coordonnées X / Y de la souris en points relatifs à votre formulaire, qui devrait le faire.
Éditer: utilisez plutôt les propriétés de l'objet args de l'événement mouse:
Label1.Location = New Point(e.X, e.Y)
PS pardonne le VB, pas de C # sur ce PC
L'emplacement d'un élément est relatif à son parent. Dans ce cas, vous utilisez la position absolue de la souris comme emplacement.
Vous devrez traduire la position de la souris dans le système de coordonnées de l'élément parent.
Utilisez le PointToClient
sur l'élément parent de l'étiquette.