0

你好我有这个代码:

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);
    }
}

我试图让它根据鼠标的位置创建一个标签,但它似乎是在整个显示器中创建位置。我认为如果我为其分配坐标,form mouse move它将在表单中获得坐标。有人可以帮我解决这个问题吗?

4

2 回答 2

3

Cursor.Position 坐标是相对于整个屏幕的。您需要相对于表单左上角的位置。您可以简单地从传递给 MouseMove 事件处理程序的 MouseEventArgs 获取该信息

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

MouseEventArgs.Location属性是(根据 MSDN )

一个点,包含相对于表单左上角的 x 和 y 鼠标坐标(以像素为单位)。

于 2013-09-30T23:15:35.687 回答
0

史蒂夫是正确的,为了将屏幕坐标转换为控件或表单坐标,您可以使用此处描述的方法:

如何将屏幕坐标转换为相对坐标(winforms)?

在你的情况下:

Point clientPoint = PointToClient( new Point( e.X, e.Y ) );
于 2013-09-30T23:27:24.383 回答