我有一个代码,它在运行时创建一个TextBox,同时调整大小并移动预先创建的控件。 我面临的问题是我无法调整大小或移动我在运行时创建的控件。
这是守则。
public System.Windows.Forms.TextBox AddNewTextBox()
{
System.Windows.Forms.TextBox txt = new System.Windows.Forms.TextBox();
this.Controls.Add(txt);
txt.Top = cLeft * 25;
txt.Left = 100;
txt.Text = "TextBox " + this.cLeft.ToString();
cLeft = cLeft + 1;
return txt;
}
private void button3_Click_1(object sender, EventArgs e)
{
AddNewTextBox();
}
private void button3_Click(object sender, EventArgs e)
{
ControlMoverOrResizer.Init(textBox1);
cboWorkType.SelectedIndex = 0;
}
我面临的问题是我不知道如何在
中引用新创建的文本框ControlMoverOrResizer.Init(textBox1);
我试着打电话
txt.Text
但它正在抛出错误 无法将String转换为Windows.form.controls。
请指导我错误的地方。 感谢
答案 0 :(得分:0)
您必须获得对该控件的引用。将其存储为表单中的字段,或者将其设置为Name
,稍后在控件集合中找到它。
如果您只添加一个文本框,那么很简单:
方法1:
在表单中添加一个字段,并在创建TextBox
private void button3_Click_1(object sender, EventArgs e)
{
this.myTextBox = AddNewTextBox();
}
随后:
ControlMoverOrResizer.Init(this.myTextBox);
方法2:为其命名并稍后动态找到它:
private void button3_Click_1(object sender, EventArgs e)
{
var txt = AddNewTextBox();
txt.Name = "MyTextBox";
}
随后:
ControlMoverOrResizer.Init(this.Controls["MyTextBox"]);
请注意,如果您添加多个TextBox
,则必须稍微修改此代码
答案 1 :(得分:0)
你需要从哪里引用。也许将文本框添加到字典中。
private Dictionary<string, TextBox> dynamicTextBoxes = new Dictionary<string, TextBox>();
public System.Windows.Forms.TextBox AddNewTextBox()
{
System.Windows.Forms.TextBox txt = new System.Windows.Forms.TextBox();
this.Controls.Add(txt);
dynamicTextBoxes.Add($"tb{cLeft}", txt);
txt.Top = cLeft * 25;
txt.Left = 100;
txt.Text = "TextBox " + this.cLeft.ToString();
cLeft = cLeft + 1;
return txt;
}
private void button3_Click(object sender, EventArgs e)
{
ControlMoverOrResizer.Init(dynamicTextBoxes[$"tb{cLeft - 1}"]);
cboWorkType.SelectedIndex = 0;
}
注意:这只会移动最后添加的文本框!