2010-06-19 9 views
0

Je me demande comment je peux mettre à jour ma listview dans form1 en entrant des données via des zones de texte dans form2. Mon code fonctionne bien si je mets toutes les zones de texte sur le même formulaire, etc.Ajouter à la liste à partir d'un autre formulaire

Je me suis dit que j'avais besoin d'une référence au premier formulaire mais que je n'arrive pas à le faire fonctionner.

Tous les conseils pour me mettre dans la bonne direction seraient bien, aussi des conseils pour une meilleure façon de le faire.

Ceci est le code que j'ai jusqu'à présent:

Form1:

public partial class form1 : Form 
    { 
     public form1() 
     { 
      InitializeComponent(); 
     } 

     public ListView MyListView 
     { 
      get 
      { 
       return taskList; 
      } 
     } 

Form2:

public partial class form2 : Form 
    { 
     public form2() 
     { 
      InitializeComponent(); 
     } 

     form1 f; 

     public add(form1 f) 
     { 
      this.f = f; 
     }   

     public void AddToList() 
     { 
       ListViewItem item1 = new ListViewItem(txtName.Text); 
       item1.SubItems.Add(txtEmail.Text); 
       item1.SubItems.Add(txtPhone.Text); 
       f.MyListView.Items.AddRange(new ListViewItem[] { item1 }); 
     } 

Répondre

3

La manière la plus directe de faire les choses serait d'utiliser des événements. Vous pouvez ajouter un événement sur form2 qui se déclencherait chaque fois qu'un élément est ajouté, et inclut le texte à insérer (vous avez plusieurs informations, un type de données personnalisé est donc approprié). Vous pouvez ensuite ajouter une méthode de gestionnaire à form2 qui ajoute l'élément à son ListView. Vous liez ensuite les deux dans le code qui crée les deux formes, et la vie devrait être bonne.

, de fournir un code, premier est la structure de données pour l'événement:

public delegate void HandleItemAdded(object sender, ItemAddedEventArgs e);  

public struct ItemAddedEventArgs : EventArgs 
{ 
    public string Name; 
    public string Email; 
    public string Phone; 

    public ItemAddedEventArgs(string name, string email, string phone) 
    { 
     Name = name; 
     Email = email; 
     Phone = phone; 
    } 
} 

Ensuite, nous avons le code d'événement sur form2

public event HandleItemAdded ItemAdded; 
// .. some other stuff 
public void RaiseItemAdded(ItemAddedEventArgs e) 
{ 
    if(ItemAdded != null) 
     ItemAdded(this,e); 
} 

// ... now for your AddToList 
public void AddToList() 
{ 

    RaiseItemAdded(new ItemAddedEventArgs(txtName.Text,txtEmail.Text, txtPhone.Text); 
} 

Et maintenant, nous pouvons ajouter un gestionnaire dans form1

public void HandleItemAdded(object sender, ItemAddedEventArgs e) 
{ 
    ListViewItem item1 = new ListViewItem(txtName.Text); 
    item1.SubItems.Add(txtEmail.Text); 
    item1.SubItems.Add(txtPhone.Text); 
    MyListView.Add(item1); 
} 

Et last but not least, nous avons besoin de les attacher ensemble

//...not sure what your code looks like, but we'll assume we have instances of the two forms named form1Form and form2Form 
form2Form.ItemAdded += form1Form.HandleItemAdded 
+0

Vous avez passé quelques heures à lire et à explorer les événements avec mon livre C#, juste pour comprendre comment tout cela fonctionne. C'était exactement ce dont j'avais besoin, merci. – Zubirg

0

la place contrôle listview devrait être privé, ajouter une méthode publique à votre formulaire contient le contrôle listview, qui reçoit les données que vous souhaitez insérer et les insère dans la liste.

0

Si form2 n'est pas créé par et affiché par form1, vous n'allez pas avoir de référence à appeler. Dans ce cas, les choses vont devenir un peu plus intéressantes du point de vue de la communication. Lorsque cela se produit, vous devez utiliser un modèle événement pour obtenir les informations d'un endroit à un autre.

Questions connexes