2013-02-25 5 views
0

J'ai deux formulaires, Form1 (formulaire principal) et Form2. Formulaire 1 affiche les fichiers images, la conversion pdf, etc. Mais si l'utilisateur veut voir les fichiers Zip, Form2 est appelé affichant un aperçu de tous les fichiers Zip disponibles sur un listView. Si l'utilisateur sélectionne un fichier Zip particulier sur Form2, le fichier est décompressé et les fichiers image sont envoyés à Form2. Mais je ne sais pas comment actualiser Form2 à partir de Form1. D'ailleurs, toutes les images de Form2 sont maintenant présentes dans la liste des variables dans Form! à afficher mais le formulaire n'a pas été mis à jour.Mettre à jour Form1 (formulaire principal) à partir du formulaire 2 pour afficher les images traitées

Code form2:

private void btn_read_Click(object sender, EventArgs e) 
    { 

     Form1 f1 = new Form1(); 
     f1.ReadArchives(Filepath); //this function creates the image files on Form1 
     this.Close(); //close form2 

     for (int index = Application.OpenForms.Count - 1; index >= 0; index--) 
     { 
      if (Application.OpenForms[index].Name == "Form1") 
      { 
       //Application.OpenForms[index].Close();//EFFECTIVE BUT CLOSES THE WHOLE APPLICATION 
       Application.OpenForms[index].Invalidate(); //no effect 
       Application.OpenForms[index].Refresh();//no effect 
       Application.OpenForms[index].Update();//no effect 
       Application.OpenForms[index].Show();//no effect 
      } 
     }    

    } 

Répondre

0

Ainsi, lorsque vous voulez que le formulaire parent fasse quelque chose quand quelque chose se passe sur le formulaire enfant, le mécanisme approprié est d'utiliser des événements. Dans ce cas, le formulaire enfant est fermé juste lorsque nous voulons que l'information soit transmise, donc nous pouvons simplement réutiliser l'événement FormClosed.

Cela rend l'écriture du formulaire enfant très simple:

public partial class Form2 : Form 
{ 
    public string Filepath {get;set;} 

    private void btn_read_Click(object sender, EventArgs e) 
    { 
     Close(); 
    } 
} 

Le formulaire parent peut alors utiliser l'événement approprié pour gérer le reste:

public partial class Form1 : Form 
{ 
    private void button1_Click(object sender, EventArgs args) 
    { 
     Form2 child = new Form2(); 
     child.FormClosing += (_, arg) => ReadArchives(child.Filepath); 
     child.Show(); 
    } 

    private void ReadArchives(string filepath) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

Merci Servy, mais j'ai fait face à 2 problèmes lorsque j'ai essayé de l'implémenter. 1) Form2 a refusé de fermer et 2) Je dois fermer les boutons sur Form2. Close a) est juste proche de form2 et ferme b) nis lit les archives puis ferme le form2. Toute suggestion? – Basco

+0

Merci encore, Maintenant, il fonctionne parfaitement. Dans le bouton fermer seulement j'ai fait Filepath = null, et dans le ReadArchives (child.Filepath) j'ai commencé avec if (string.IsNullOrEmpty (child.Filepath)) retour; – Basco

0

Vous instanciation nouveau Form1 dans votre code - qui est différent de Form1 (principal) que vous avez déjà. C'est pourquoi le formulaire n'est pas mis à jour.

Dans mon answer Je montre une approche basée sur les événements pour partager des variables/objets entre différentes formes - il peut être facilement ajusté pour transmettre la collection d'objets. J'espère que cela aide.

+0

Merci Nogard, En fait, je suis un débutant et je ne pourrais pas ajuster votre menthod pour travailler dans mon cas. Toute aide supplémentaire sera grandement appréciée – Basco

Questions connexes