2008-11-12 7 views
2

Quelle est la meilleure/bonne façon d'interagir entre plusieurs fenêtres dans l'application C#? Récemment, j'ai rencontré un problème où l'une des fenêtres du programme doit appeler la fenêtre principale de modification de méthode. Ma solution était de créer une classe semblable à une usine, qui organiserait toutes les données de modèle sous-jacentes et organiserait la communication entre différentes fenêtres (à travers les délégués). Cependant, comme passer un ou deux délégués ne posait pas de problème, j'ai commencé à me demander si mes autres fenêtres auraient besoin de 10 délégués pour interagir correctement avec la fenêtre principale? Les délégués sont-ils une bonne solution? Comment les transmettre dans le bon sens - à travers le constructeur, les propriétés? Ou peut-être le besoin d'utiliser autant de délégués est-il un sérieux défaut de conception?Interactions entre les fenêtres

+1

Pas du tout, il s'agit d'envoyer des messages entre les fenêtres dans une seule application, je pense, pas de communication inter-processus. – Sekhat

+0

Ah, mes excuses. Je vais le rouvrir. –

+0

@TalhaIrfan supprimé comme demandé. –

Répondre

3

Vous devez diviser le modèle de la vue par un contrôleur. Placez un objet qui pourra avoir à la fois la référence de formulaire et qui sera capable de gérer les informations partagées.

Une autre solution consiste à envoyer la référence de la formeX à la forme de cette façon, ils peuvent communiquer.

0

Si vous avez seulement besoin d'interagir avec la fenêtre principale, pourquoi ne pas donner une référence à la fenêtre principale dans le constructeur des autres?

public class MainForm : Form 
{ 
} 

public class OtherForm : Form 
{ 
    protected MainForm MainForm { get; set; } 

    public OtherForm(MainForm mainForm) : base() 
    { 
     this.MainForm = mainForm; 
    } 
} 

EDIT:

Simple et efficace.

Si vos formulaires doivent interagir avec toutes les autres formes de l'application, un modèle de type service locator peut être mieux adapté.

+0

Faire cela dans un sous-formulaire de base serait mieux. –

+0

t'a été un bref exemple :) – Sekhat

+0

Je vois. Et ce fut juste un bref commentaire :) –

0

Auparavant avec MFC, il y avait quelque chose qui notifiait toutes les fenêtres. Vous passerez un identifiant d'événement avec un paramètre.

Vous pourriez faire quelque chose de similaire avec un délégué qui exposera un identifiant d'événement et une collection de paramètres. Le plus grand avantage de ceci est que Windows ne doit implémenter qu'une seule passerelle.

0

Vous pouvez utiliser un seul délégué, en utilisant un EventArgs personnalisé pour passer plusieurs informations, comme: type de notificaton, des paramètres supplémentaires, etc.

1

Nous utilisons un gestionnaire de formulaires personnalisé qui utilise le modèle sujet/observateur.

Chaque formulaire qui est activé est signalé au FormsManager, le FromsManager se fait un observateur du formulaire.

Il fait également de la forme un observateur de FormsManager. Donc, vous vous retrouvez avec toutes les formes observant FormsManager et FormsManager observant chaque formulaire. Chaque formulaire peut ensuite communiquer avec n'importe quel autre formulaire via FormsManager sans que chaque formulaire doive être au courant de tous les autres.

+0

Je crois que c'est ce que je cherche - comme mes données sont affichées de différentes façons (plusieurs fenêtres - qui ont besoin de communiquer d'une manière ou d'une autre) le modèle d'observateur sonne comme une solution parfaite. Merci beaucoup! – user36890

Questions connexes