C# 双击鼠标位置上的添加文本框

C# 双击鼠标位置上的添加文本框,c#,winforms,C#,Winforms,我正在做一个简单的练习:双击鼠标位置(X,Y)创建一个文本框 它正在创建对象,但远离鼠标的确切位置 private void DynamicObjects_MouseDoubleClick(object sender, MouseEventArgs e) { System.Windows.Forms.TextBox txtBox = new System.Windows.Forms.TextBox(); this.Controls.Add(txtBox); txtBox.

我正在做一个简单的练习:双击鼠标位置(X,Y)创建一个文本框

它正在创建对象,但远离鼠标的确切位置

private void DynamicObjects_MouseDoubleClick(object sender, MouseEventArgs e)
{
    System.Windows.Forms.TextBox txtBox = new System.Windows.Forms.TextBox();
    this.Controls.Add(txtBox);
    txtBox.Top = MousePosition.Y;
    txtBox.Left = MousePosition.X;

    //txtBox.Location = MousePosition; --Still off away from Mouse real location
    //txtBox.Location = MousePosition.Y; -- Fives erro Cannot implicitly convert Int to 'System.Drawing.Point'
}
我发现缺少工作的唯一方法就是使用
.Top
.Left


为什么要创建远离鼠标的位置?

MousePosition
获取鼠标光标在屏幕坐标中的位置

var textBox = new TextBox();

textBox.Location = PointToClient(MousePosition);

Controls.Add(textBox);
我们必须把它转换成客户坐标

var textBox = new TextBox();

textBox.Location = PointToClient(MousePosition);

Controls.Add(textBox);
我们需要从放置文本框的同一个控件调用此方法

例如:

this.PointToClient
this.Controls.Add


为什么不使用
MouseEventArgs
event对象中的位置?可能需要使用ContextMenuStrip将新控件添加到容器中。您可以将此ContextMenuStrip分配给允许承载这些新控件的所有容器(这样,您不需要任何非常特定的事件处理程序)。
鼠标位置
将派上用场。当然,正如答案中提到的,您必须将此控件定位在其新父控件的相对边界内。很酷,谢谢!我会尝试这个解决方案,然后给出反馈。