【问题标题】:Dynamic Object Drawing Based on User Click基于用户点击的动态对象绘制
【发布时间】:2011-01-12 10:25:32
【问题描述】:

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

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

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

下面我演示了一些简化的示例代码。您会看到我使用“Click”事件处理程序注册了表单。然后,当 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);
}

【问题讨论】:

    标签: c# drawing event-handling


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。你能告诉我,“点击”和“鼠标点击”有什么区别吗?
    • @Eric:MouseClick 为您提供了一个 MouseEventArgs,其中包括诸如单击了哪个按钮以及位置(在正确的坐标中)等信息
    猜你喜欢
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    相关资源
    最近更新 更多