como mover um rótulo em um winform em tempo de execução
Pergunta
usando este evento o rótulo simplesmente desaparece, como devo fazer isso?
private void label4_MouseMove(object sender, MouseEventArgs e)
{
label4.Location = new Point(Cursor.Position.X, Cursor.Position.Y);
}
Solução
A localização de label4
é em relação ao recipiente (Form
ou controle pai), a posição do cursor pode ser em relação ao ecrã.
Você precisa ajustar a localização. Por exemplo, se o recipiente é a Form
pode encontrar sua localização na tela e calcular por isso a localização do cursor em relação à tela.
Esta é apenas uma possibilidade para a causa, mas este é acontece muito:)
Outras dicas
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;
}
Uso do formulário PointToClient () para traduzir as coordenadas do mouse X / Y em pontos que são relativos ao formulário, que deve fazê-lo.
Edit: Use o mouse args evento propriedades do objeto em vez disso:
Label1.Location = New Point(e.X, e.Y)
PS perdão a VB, não C # neste PC
A localização de um elemento é relativo a seu pai. Neste caso, se você está usando a posição absoluta do mouse como a sua localização.
Você vai precisar de traduzir a posição do mouse no sistema de coordenadas do elemento pai.
Use a PointToClient
método em elemento pai do rótulo.