代码之家  ›  专栏  ›  技术社区  ›  r4ccoon

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

  •  -1
  • r4ccoon  · 技术社区  · 15 年前

    我想做的其实比这更复杂。

    我想在现有表单中插入另一个类似控件的文本框,但在单击按钮等事件之后。

    新文本框将插入到同一表单(主表单)中

    然后在同一个项目中,我添加了新的窗体窗口。然后在那里放一个文本框。

    form2.showdialog();
    

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

    谢谢你的尽快回复。

    3 回复  |  直到 15 年前
        1
  •  3
  •   Daniel Brückner Pradip    15 年前

    TextBox.Visible 事件中的属性。

    TableLayoutPanel 并在运行时向其添加控件。

    最后,您可以使用如下内容将控件添加到主窗体中。

    Control textBox = new TextBox();
    
    // Set the location, size, and all the other properties.
    
    this.Controls.Add(textBox);
    

    通过这种方式,您可以最大限度地自由构建表单,但对于非常简单的情况,获得合理的布局是非常重要的。

        2
  •  1
  •   Ed Swangren    15 年前
    private void button1_Click( object sender, EventArgs e )
    {
        TextBoxt text = new TextBox( );
        // set location and other properties
        this.Controls.Add( text );
    }
    
        3
  •  0
  •   r4ccoon    15 年前

    我可以使用列表(通用列表)解决它

    在主窗体中,创建一个私有变量列表 并创建public方法来获取变量。

    在main表单中,通过循环列表创建要添加的公共方法。

    所以在我创建的新类中,在我 把表单的创建放进去。我把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);