Marek
Marek

Reputation: 3575

Create new label on location of mouse position

Hello I have got this code:

private Label newLabel = new Label();
Int32         mouseX;
Int32         mouseY;

private void form_MouseMove(object sender, MouseEventArgs e)
{
    mouseY = Cursor.Position.Y;
    mouseX = Cursor.Position.X;
}

private void button1_Click(object sender, EventArgs e)
{
    int txt = Int32.Parse(textBox1.Text);

    for (int i = 0; i < txt; i++)
    {
        newLabel = new Label();
        newLabel.Location = new Point(mouseY, mouseX);
        newLabel.Size = new System.Drawing.Size(25, 25);
        newLabel.Text = i.ToString();
        newLabel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
        newLabel.ForeColor = Color.Red;
        newLabel.Font = new Font(newLabel.Font.FontFamily.Name, 10);
        newLabel.Font = new Font(newLabel.Font, FontStyle.Bold);
        newLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
        newLabel.MouseMove += new MouseEventHandler(this.MyControl_MouseMove);
        newLabel.MouseDown += new MouseEventHandler(this.MyControl_MouseDown);
        this.Controls.Add(newLabel);
    }
}

And I try to make it create a label according to where the mouse is, but it seems that it is creating with location within the whole display. I thought that if I assign the coordinates to form mouse move it would get coordinates within the form. May someone help me solve this out please?

Upvotes: 0

Views: 2669

Answers (2)

Daniel Mošmondor
Daniel Mošmondor

Reputation: 19986

Steve is correct, and in order to convert screen coordinates to control or form coordinates you can use method described here:

How to convert screen coordinates to form relative coordinates (winforms)?

In your case:

Point clientPoint = PointToClient( new Point( e.X, e.Y ) );

Upvotes: 0

Steve
Steve

Reputation: 216353

The Cursor.Position coordinate is relative to the whole screen. You need a position relative to the upper left of your form. You could simply get that info from the MouseEventArgs passed to your MouseMove event handler

    private void form_MouseMove(object sender, MouseEventArgs e)
    {
        mouseY = e.Location.Y;
        mouseX = e.Location.X;
    }

The MouseEventArgs.Location property is (according to MSDN)

A Point that contains the x- and y- mouse coordinates, in pixels, relative to the upper-left corner of the form.

Upvotes: 3

Related Questions