1

每当用户单击表单时,我都想在光标位置添加一个标签。从这个问题的答案:Getting mouse position in c#

我用过

    private void Form1_MouseClick(object sender, MouseEventArgs e)
    {
        Label lbl = new Label();
        lbl.Location = Cursor.Position;
        lbl.Visible = true;
        this.Controls.Add(lbl);
    }

但是当我运行程序并单击表单时,什么也没有发生。

请问我做错了什么?

4

1 回答 1

1

您的代码有几个问题。首先,Cursor.Position返回光标相对于屏幕的位置,但标签的位置是相对于表单测量的。这将导致标签被放置(很可能)在您实际单击的位置左侧和下方的某个位置。正如Groo指出的那样,您可以PointToClient从屏幕坐标转换为客户端(表单)坐标,但在这种情况下这不是必需的,因为MouseEventArgs已经提供了这个。

第二个问题是,尽管您已将Visible属性设置为true(实际上没有必要,因为它默认为true),但您实际上并没有给它任何要显示的文本。标签已添加,但您将无法看到它。

使用事件中指定的位置 ( e.Location),并给标签一些文本 ( lbl.Text),以便您可以实际看到它:

private void Form1_MouseClick(object sender, MouseEventArgs e)
{
    Label lbl = new Label();
    lbl.Location = e.Location;
    lbl.Text = "Hello World";
    this.Controls.Add(lbl);
}

最后,如果您还没有将事件正确绑定到表单,请确保:

public Form1()
{
    InitializeComponent();
    this.MouseClick += Form1_MouseClick;
}
于 2013-09-05T22:17:44.280 回答