在光标位置插入标签

时间:2013-09-05 22:10:49

标签: c# winforms cursor

每当用户点击表单时,我想在光标位置有一个标签。从这个问题的答案: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);
    }

但是当我运行程序并单击表单时,没有任何反应。

请问我做错了什么?

1 个答案:

答案 0 :(得分: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;
}