how to move a label on a winform at Runtime

17,841

Solution 1

The location of label4 is relative to the container (Form or parent control), Cursor position may be relative to the screen.

You need to adjust the location. For example, if the container is the Form you can find its location in the screen and calculate by it the location of the cursor relative to screen.

This is only one possibility for the cause, but this one is happens a lot :)

Solution 2

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;

        }

Solution 3

Use the form's PointToClient() function to translate the mouse X/Y coordinates into points that are relative to your form, that should do it.

Edit: Use the mouse event args object properties instead:

Label1.Location = New Point(e.X, e.Y)

PS pardon the VB, no C# on this PC

Solution 4

The location of an element is relative to its parent. In this case though you are using the absolute mouse position as its location.

You'll need to translate the mouse position into the coordinate system of the parent element.

Use the PointToClient method on the label's parent element.

Share:
17,841
Darkmage
Author by

Darkmage

Updated on July 24, 2022

Comments

  • Darkmage
    Darkmage almost 2 years

    using this event the label just disappears, how shod i do this?

        private void label4_MouseMove(object sender, MouseEventArgs e)
        {
            label4.Location = new Point(Cursor.Position.X, Cursor.Position.Y);
        }