2009-09-28 8 views
-1

Ce que je veux faire est en fait plus complexe que cela. mais le principal est ce ..winform C#: insérer un autre contrôle de formulaire après un événement dans C#

Je veux insérer un autre contrôle comme la zone de texte dans un formulaire existant, mais après un événement comme un clic d'un bouton.

la nouvelle zone de texte serait inséré dans la même forme (forme principale)

ce que j'ai est. J'ai créé comme d'habitude des applications sous forme de fenêtres, puis mettre un bouton là. puis dans le même projet j'ajoute une nouvelle fenêtre de formulaire. et mettez une boîte de texte là.

et en cas de clic sur le bouton, je peux mettre

form2.showdialog(); 

cela fonctionne, mais il montre comme une boîte de dialogue.

mais ce que je veux est que la zone de texte apparaît sur la principale forme, et non pas dans la nouvelle forme comme une boîte de dialogue.

merci pour la réponse dès que possible.

Répondre

0

hei. Je suis capable de le résoudre en utilisant la liste (liste générique)

dans la forme principale, créer un variabel privé Liste et créer une méthode publique pour obtenir la variable.

sous forme principale, créez une méthode publique à ajouter en boucle dans la liste.

donc dans la nouvelle classe que j'ai créé, dans l'une des méthodes i mettre la création de la forme. et ici je passe la liste de contrôle.

puis de mettre toute la variable de contrôle dans le contrôle de la liste.

et un clic sur un bouton, j'appelle la méthode de classe, et il attirera automatiquement les contrôles de formulaire qui ont créé par la classe.

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); 
       } 
      } 
     } 

et pour la nouvelle classe j'ai créé, je peux mettre

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

Si vous avez besoin que d'une seule zone de texte parfois visible, parfois, je suggère simplement d'ajouter dans le concepteur et basculer la propriété TextBox.Visible en cas.

Si vous devez ajouter dynamiquement plusieurs contrôles, je suggère d'utiliser le TableLayoutPanel et ajouter des contrôles à elle lors de l'exécution.

Enfin vous pouvez simplement ajouter le contrôle à la forme principale avec quelque chose comme ce qui suit.

Control textBox = new TextBox(); 

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

this.Controls.Add(textBox); 

De cette façon, vous avez la plus grande liberté de construire votre forme, mais accepter pour des cas très simples, il est non trivial d'obtenir un aménagement raisonnable.

+0

havent a réussi à appliquer cette – r4ccoon

+0

je suis en train de le faire sur un fichier séparé et classe. Je pense que je dois passer la variable de forme principale. – r4ccoon

+0

j'ai une classe FormUI_VectorAddition, et j'ai la méthode InitializeComponent (Control control, forme windowForm) le contrôle est en fait un panneau. control.SuspendLayout(); form.SuspendLayout(); control.Controls.Add (this.txtBox_v1a); this.txtBox_v1a = nouveau System.Windows.Forms.TextBox(); control.ResumeLayout (false); control.PerformLayout(); forme.ResumeLayout (faux); – r4ccoon

Questions connexes