2009-09-28 58 views
-1

我想要做的事实际上比这更复杂。 但主要是这..winform c#:在c事件后插入另一个窗体控件#

我想插入另一个控制像文本框到现有的形式,但一些事件后,如点击一个按钮。

新的文本框将被插入到相同的形式(主要形式)

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

和按钮点击的事件,我把

form2.showdialog(); 

它的工作原理,但它显示为一个对话框。

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

感谢您的尽快答复。

回答

0

hei。 我能够解决它通过使用列表(通用列表)

在主窗体中,创建一个私人的变异名单 并创建公共方法来获取变量。

在主窗体中,通过循环列表创建一个公共方法来添加。

所以在我创建的新班级中,在方法i 之一放置了窗体的创建。并进入这里我通过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); 
1
private void button1_Click(object sender, EventArgs e) 
{ 
    TextBoxt text = new TextBox(); 
    // set location and other properties 
    this.Controls.Add(text); 
} 
3

如果你只需要一个文本框有时可见,有时不,我建议只将其添加在设计和切换事件的TextBox.Visible财产。

如果您需要动态添加多个控件,我建议使用TableLayoutPanel并在运行时为其添加控件。

最后,您可以将控件添加到主窗体中,如下所示。

Control textBox = new TextBox(); 

// Set the location, size, and all the other properties. 

this.Controls.Add(textBox); 

这样你就有最大的自由来建立你的表单,但接受非常简单的情况下,获得合理的布局是不平凡的。

+0

还没有成功地应用此 – r4ccoon 2009-09-28 06:49:38

+0

我试图做一个单独的文件和类。我想我必须通过主窗体变量。 – r4ccoon 2009-09-28 07:45:57

+0

我有一个FormUI_VectorAddition类,并且我有方法InitializeComponent(Control control,windowForm form) control实际上是一个面板。 control.SuspendLayout(); form.SuspendLayout(); control.Controls.Add(this.txtBox_v1a); this.txtBox_v1a = new System.Windows.Forms.TextBox(); control.ResumeLayout(false); control.PerformLayout(); form.ResumeLayout(false); – r4ccoon 2009-10-01 01:25:19