基于用户点击的动态对象绘图

时间:2011-01-12 02:16:40

标签: c# drawing event-handling

我在C#中使用Windows窗体,我想创建一个执行以下操作的函数:
当用户点击表单时,将在用户单击的位置绘制“内容”。

我有两个问题:
1)是否有最佳实践/推荐方法?现在我正在使用单击鼠标时触发的Windows EventHandler,获取光标的位置,然后在该位置绘制对象。

2)当我在“Cursor.Position”的位置绘制对象时,实际绘制的距离远远超过实际光标所在的位置。 (它将其向下和向左绘制。)是否必须在Cursor.Position上进行某种类型的转换才能获得屏幕坐标?

下面我演示了一些简化的示例代码。您看到我使用“Click”EventHandler注册表单。然后,当EventHandler触发时,我调用一个只在表单上绘制标签的函数。

提前感谢您的帮助。

MyForm myForm = new myForm();
myForm.Click += new System.EventHandler(this.MyForm_Click);

_

private void MyForm_Click(object sender, EventArgs e)
{
    Point p = Cursor.Position;    // Does this get the correct position?
    DrawObject(p);
}

private void DrawObject(Point p)
{
    Label l = new Label()
    l.Size = new System.Drawing.Size(300, 300);
    l.Text = "New Label";
    l.Location = p;
    this.Controls.Add(l);
}

1 个答案:

答案 0 :(得分:2)

您应该订阅MouseClick event,而不是使用Cursor.Position。这将为您提供处理程序本身的位置信息。

Cursor.Position将为您提供屏幕坐标的坐标。如果您想使用它,则需要使用PointToClient将其映射到表单的坐标空间。