我想做的事实际上比这更复杂。 但校长是这个......
我想将另一个控件(如文本框)插入到现有表单中,但是在某些事件之后,例如单击按钮。
新文本框将插入相同的表单(主表单)
我得到的是。我像往常一样创建了Windows窗体应用程序,然后在那里放了一个按钮。 然后在同一个项目中添加新的表单窗口。并在那里放一个文本框。
如果按下按钮,我会把
form2.showdialog();
它可以工作,但它显示为一个对话框。
但我想要的是文本框显示在主窗体上,而不是作为对话框在新窗体中显示。
感谢asap回复。
答案 0 :(得分:3)
如果您只需要一个文本框,有时候看不到,我建议您只需将其添加到设计器中并在事件中切换TextBox.Visible
属性。
如果你需要动态添加几个控件,我建议使用TableLayoutPanel
并在运行时添加控件。
最后,您可以使用以下内容将控件添加到主窗体中。
Control textBox = new TextBox();
// Set the location, size, and all the other properties.
this.Controls.Add(textBox);
通过这种方式,您可以最大限度地自由地构建表单,但是对于非常简单的情况,接受合理布局并非易事。
答案 1 :(得分:1)
private void button1_Click( object sender, EventArgs e )
{
TextBoxt text = new TextBox( );
// set location and other properties
this.Controls.Add( text );
}
答案 2 :(得分:0)
平。 我能够通过使用列表(通用列表)来解决它
在主窗体中,创建一个私有变量列表 并创建公共方法来获取变量。
在主窗体中,通过循环遍历列表来创建要添加的公共方法。
所以在我创建的新类中,使用其中一种方法 把表格的创作。进入这里我通过listcontrol。
然后将所有控制变量放入列表控件。
然后单击一个按钮,我调用类方法,然后它将自动绘制由类创建的表单控件。
private List<Control> listControl;
public windowForm()
{
InitializeComponent();
listControl = new List<Control>();
}
public List<Control> ListControl {
get { return listControl; }
}
public void addControl() {
if (this.listControl.Count() > 0) {
foreach (Control c in listControl)
{
Console.WriteLine("adding "+c.Name);
this.panel1.Controls.Add(c);
}
}
}
public void removeControl() {
if (this.listControl.Count() > 0)
{
foreach (Control c in listControl)
{
Console.WriteLine("removing " + c.Name);
this.panel1.Controls.Remove(c);
}
}
}
对于我创建的新课程,我把
this.groupbox_VectorAddition = new System.Windows.Forms.GroupBox();
this.txtBox_v1a = new System.Windows.Forms.TextBox();
this.txtBox_v1b = new System.Windows.Forms.TextBox();
this.txtBox_v1c = new System.Windows.Forms.TextBox();
this.txtBox_v2c = new System.Windows.Forms.TextBox();
this.txtBox_v2b = new System.Windows.Forms.TextBox();
this.txtBox_v2a = new System.Windows.Forms.TextBox();
this.lbl_Vector1 = new System.Windows.Forms.Label();
this.lbl_Vector2 = new System.Windows.Forms.Label();
this.btn_countAddVector = new System.Windows.Forms.Button();
this.btn_resetVector = new System.Windows.Forms.Button();
//put everything into the panel
form.ListControl.Add(btn_resetVector);
form.ListControl.Add(btn_countAddVector);
form.ListControl.Add(lbl_Vector2);
form.ListControl.Add(lbl_Vector1);
form.ListControl.Add(txtBox_v2a);
form.ListControl.Add(txtBox_v2b);
form.ListControl.Add(txtBox_v2c);
form.ListControl.Add(txtBox_v1c);
form.ListControl.Add(txtBox_v1b);
form.ListControl.Add(txtBox_v1a);
form.ListControl.Add(groupbox_VectorAddition);