2011-01-12 49 views
0

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

回答

2

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

Cursor.Position会给你坐标在屏幕坐标。如果您想使用它,您需要使用PointToClient将其映射到您的表单的坐标空间。

+0

谢谢。你能告诉我,“Click”和“MouseClick”有什么区别? – Eric 2011-01-12 02:33:50

相关问题