C# 双击鼠标位置上的添加文本框
我正在做一个简单的练习:双击鼠标位置(X,Y)创建一个文本框 它正在创建对象,但远离鼠标的确切位置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.
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分配给允许承载这些新控件的所有容器(这样,您不需要任何非常特定的事件处理程序)。鼠标位置
将派上用场。当然,正如答案中提到的,您必须将此控件定位在其新父控件的相对边界内。很酷,谢谢!我会尝试这个解决方案,然后给出反馈。