Question

Je cherche à rafraîchir la forme lorsque le formulaire 2 est fermé. Je sais que d'utiliser un événement de clôture de la forme 2, mais c'est là où je me perds.

Merci

Était-ce utile?

La solution

Une bonne façon d'y parvenir est d'utiliser le modèle de médiateur. De cette façon, vos formulaires ne savent pas nécessairement ont les uns des autres. Le médiateur pour permettre de gérer l'interaction entre les formes de sorte que chaque forme individuelle peut se concentrer sur ses propres responsabilités.

Un médiateur très brut qui permettrait d'atteindre ce que vous voulez peut être mis en œuvre comme ceci:

public class FormMediator
{
    public Form MainForm { private get; set; }
    public Form SubForm { private get; set; }

    public void InitializeMediator()
    {
        MainForm.FormClosed += MainForm_FormClosed;
    }

    void MainForm_FormClosed(object sender, FormClosedEventArgs e)
    {
        SubForm.Refresh();
    }
}

Maintenant, votre formulaire de sous mettra à jour chaque fois que la forme principale est fermée, et ne doit rien savoir sur l'autre.

EDIT:

Ok, donc je vais mettre cette solution que va vous aider à démarrer, mais s'il vous plaît noter que ce n'est qu'une mise en œuvre rudimentaire d'un motif de médiateur. Je vous encourage fortement à lire sur ce modèle, et modèles de conception en général afin d'obtenir une meilleure compréhension de ce qui se passe.

Encore une fois, ceci est un exemple, mais il a une erreur de base de vérification et devrait vous permettre de continuer.

Votre formulaire de déclaration va ressembler à quelque chose comme ceci:

public partial class MainForm : Form
{
    private FormMediator _formMediator;

    public MainForm()
    {
        InitializeComponent();
    }

    public void SomeMethodThatOpensTheSubForm()
    {
        SubForm subForm = new SubForm();

        _formMediator = new FormMediator(this, subForm);

        subForm.Show(this);
    }
}

Et ressemblerait la mise en œuvre modifiée du Médiateur ceci:

public class FormMediator
{
    private Form _subForm;
    private Form _mainForm;

    public FormMediator(Form mainForm, Form subForm)
    {
        if (mainForm == null)
            throw new ArgumentNullException("mainForm");

        if (subForm == null)
            throw new ArgumentNullException("subForm");

        _mainForm = mainForm;
        _subForm = subForm;

        _subForm.FormClosed += MainForm_FormClosed;
    }

    void MainForm_FormClosed(object sender, FormClosedEventArgs e)
    {
        try
        {
            _mainForm.Refresh();
        }
        catch(NullReferenceException ex)
        {
            throw new InvalidOperationException("Unable to close the Main Form because the FormMediator no longer has a reference to it.", ex);
        }
    }
}

Autres conseils

Une solution consiste à passer une référence de Form1 à Form2 dans le constructeur et il suffit d'appeler f1.Invalidate (true) sur l'événement de clôture de Form2.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top