Cómo mover una etiqueta en un winform en tiempo de ejecución
Pregunta
usando este evento, la etiqueta simplemente desaparece, ¿cómo debo hacer esto?
private void label4_MouseMove(object sender, MouseEventArgs e)
{
label4.Location = new Point(Cursor.Position.X, Cursor.Position.Y);
}
Solución
La ubicación de label4
es relativa al contenedor ( Form
o control de los padres), la posición del cursor puede ser relativa a la pantalla.
Necesitas ajustar la ubicación. Por ejemplo, si el contenedor es el Formulario
, puede encontrar su ubicación en la pantalla y calcular con ella la ubicación del cursor en relación con la pantalla.
Esta es solo una posibilidad para la causa, pero esta pasa mucho :)
Otros consejos
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;
}
Use la función PointToClient () del formulario para traducir las coordenadas X / Y del mouse en puntos relativos a su formulario, que deberían hacerlo.
Editar: use las propiedades del objeto args del evento del ratón en su lugar:
Label1.Location = New Point(e.X, e.Y)
PS perdón por el VB, no C # en esta PC
La ubicación de un elemento es relativa a su padre. En este caso, aunque esté utilizando la posición absoluta del mouse como su ubicación.
Tendrá que traducir la posición del mouse al sistema de coordenadas del elemento padre.
Use PointToClient
método en el elemento padre de la etiqueta.