winform c#:在c#中的事件后插入另一个表单控件

时间:2009-09-28 04:38:53

标签: c# winforms

我想做的事实际上比这更复杂。 但校长是这个......

我想将另一个控件(如文本框)插入到现有表单中,但是在某些事件之后,例如单击按钮。

新文本框将插入相同的表单(主表单)

我得到的是。我像往常一样创建了Windows窗体应用程序,然后在那里放了一个按钮。 然后在同一个项目中添加新的表单窗口。并在那里放一个文本框。

如果按下按钮,我会把

form2.showdialog();

它可以工作,但它显示为一个对话框。

但我想要的是文本框显示在主窗体上,而不是作为对话框在新窗体中显示。

感谢asap回复。

3 个答案:

答案 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);