动态创建、移动和调整控件大小
Dynamically Create,Move And Resize The Controls
我有一段代码可以在 运行 时间内创建一个文本框,还可以调整大小并移动预先创建的控件。
我面临的问题是我无法调整大小或移动我在 运行 时间内创建的控件。
这是代码。
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
但它抛出了错误
无法将字符串转换为 Windows.form.controls.
请指导我哪里出错了。
谢谢
您必须获得对控件的引用。要么将它存储为表单中的一个字段,要么给它一个 Name
并稍后在控件集合中找到它。
如果只添加一个文本框就很简单了:
方法一:
向您的表单添加一个字段,并在您创建 TextBox
时分配它
private void button3_Click_1(object sender, EventArgs e)
{
this.myTextBox = AddNewTextBox();
}
之后:
ControlMoverOrResizer.Init(this.myTextBox);
方法二:起个名字,以后动态找:
private void button3_Click_1(object sender, EventArgs e)
{
var txt = AddNewTextBox();
txt.Name = "MyTextBox";
}
之后:
ControlMoverOrResizer.Init(this.Controls["MyTextBox"]);
请注意,如果您添加多个 TextBox
,您将不得不稍微调整此代码
您需要某个地方作为参考。也许将您的文本框添加到字典中。
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;
}
注意:这只会移动最后添加的文本框!
我有一段代码可以在 运行 时间内创建一个文本框,还可以调整大小并移动预先创建的控件。 我面临的问题是我无法调整大小或移动我在 运行 时间内创建的控件。
这是代码。
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
但它抛出了错误 无法将字符串转换为 Windows.form.controls.
请指导我哪里出错了。 谢谢
您必须获得对控件的引用。要么将它存储为表单中的一个字段,要么给它一个 Name
并稍后在控件集合中找到它。
如果只添加一个文本框就很简单了:
方法一:
向您的表单添加一个字段,并在您创建 TextBox
private void button3_Click_1(object sender, EventArgs e)
{
this.myTextBox = AddNewTextBox();
}
之后:
ControlMoverOrResizer.Init(this.myTextBox);
方法二:起个名字,以后动态找:
private void button3_Click_1(object sender, EventArgs e)
{
var txt = AddNewTextBox();
txt.Name = "MyTextBox";
}
之后:
ControlMoverOrResizer.Init(this.Controls["MyTextBox"]);
请注意,如果您添加多个 TextBox
,您将不得不稍微调整此代码
您需要某个地方作为参考。也许将您的文本框添加到字典中。
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;
}
注意:这只会移动最后添加的文本框!