come spostare un'etichetta su una winform in fase di esecuzione
Domanda
utilizzando questo evento l'etichetta scompare, come devo fare?
private void label4_MouseMove(object sender, MouseEventArgs e)
{
label4.Location = new Point(Cursor.Position.X, Cursor.Position.Y);
}
Soluzione
La posizione di label4
è relativa al contenitore ( Form
o controllo principale), la posizione del cursore potrebbe essere relativa allo schermo.
Devi regolare la posizione. Ad esempio, se il contenitore è il Modulo
puoi trovare la sua posizione nella schermata e calcolare da essa la posizione del cursore relativa alla schermata.
Questa è solo una possibilità per la causa, ma questa succede molto :)
Altri suggerimenti
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;
}
Usa la funzione PointToClient () del modulo per tradurre le coordinate X / Y del mouse in punti relativi al tuo modulo, che dovrebbero farlo.
Modifica: utilizzare invece le proprietà dell'oggetto args dell'evento mouse:
Label1.Location = New Point(e.X, e.Y)
PS scusa il VB, nessun C # su questo PC
La posizione di un elemento è relativa al suo genitore. In questo caso però stai usando la posizione assoluta del mouse come posizione.
Dovrai tradurre la posizione del mouse nel sistema di coordinate dell'elemento genitore.
Utilizza PointToClient
sull'elemento padre dell'etichetta.