每当用户点击表单时,我想在光标位置有一个标签。从这个问题的答案: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);
}
但是当我运行程序并单击表单时,没有任何反应。
请问我做错了什么?
答案 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;
}