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
Répondre
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.
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é.
Faire cela dans un sous-formulaire de base serait mieux. –
t'a été un bref exemple :) – Sekhat
Je vois. Et ce fut juste un bref commentaire :) –
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.
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.
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.
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
- 1. Cocoa webView - Désactiver toutes les interactions
- 2. Gestion de plusieurs vues et interactions
- 3. Autoriser l'ouverture de plusieurs fenêtres si les fenêtres n'existent pas
- 4. VIM Compilation dans les fenêtres
- 5. Construire Elsa sur les fenêtres
- 6. Erreur BlueCloth sur les fenêtres
- 7. Environment.SpecialFolder sur les fenêtres étrangères
- 8. WM_CHAR non-unicode dans les fenêtres unicode
- 9. Comment faire pour redimensionner les contrôles dans les fenêtres redimensionnables?
- 10. pas de correspondance entre le compte et les fenêtres de sécurité Service
- 11. diff Défaire mis lors de la copie des lignes entre les fenêtres Vimdiff
- 12. Problème de format de date entre l'application et les fenêtres avec C#
- 13. comment réinitialiser la fenêtre des interactions dans dr java?
- 14. capture stderr d'un proc_open() sur les fenêtres
- 15. Manipulation exception FPU sur les fenêtres
- 16. Démarrer l'application air/flex avec les fenêtres
- 17. Affichage des messages progressifs dans les fenêtres
- 18. Comment suivre les fenêtres associées dans X11?
- 19. fichiers de verrouillage dans les fenêtres
- 20. Comment changer les fenêtres JQuery Thickbox dynamiquement
- 21. Application DirectX sur les fenêtres 64 bits
- 22. Meilleur contrôle sur les fenêtres Emacs
- 23. sur les fenêtres de asp.net compte
- 24. Minimisation toutes les fenêtres ouvertes en C#
- 25. «Réduire» les fentes verticales des fenêtres VIM
- 26. Utilisation de MbUnit3 de [Rollback] pour les interactions NHibernate de tests unitaires avec SQLite
- 27. fenêtres sécurité
- 28. Comment afficher les icônes uniquement dans les fenêtres Visual Studio
- 29. Comment déterminer les statistiques de changement entre les révisions
- 30. Quelles bibliothèques JavaScript géreront les fenêtres pop-up (c'est-à-dire comme les fenêtres de discussion Meebo ou Gmail)?
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
Ah, mes excuses. Je vais le rouvrir. –
@TalhaIrfan supprimé comme demandé. –