J'ai trois formes nommées frmBase (form1), frmGraph (form2) et frmBalloon (form3). FrmGraph (form2) s'ouvre si l'utilisateur clique sur le bouton btnShow placé sur frmBase (form1). FrmBalloon (form3) s'ouvre si l'utilisateur clique sur le bouton btnShow placé sur frmGraph (form2). Maintenant, si l'utilisateur clique sur le bouton nommé btnCancel placé sur le frmGraph (form2) OU clique sur le bouton nommé btnCancel placé sur le frmBalloon (form3), tous les formulaires ouverts doivent être fermés à l'exception de frmBase (form1). Par conséquent, tous les formulaires doivent être fermés à l'exception de la forme principale lorsque l'utilisateur clique sur le bouton placé sur le formulaire2 ou sur le formulaire3. Donc, pour cela, y a-t-il une solution?tous les formulaires doivent être fermés mais pas la forme principale
Répondre
Il n'est pas une excellente solution, Application.OpenForms est un peu fiable, mais facile: modèle
public static void CloseAllFormsButMain() {
for (int ix = Application.OpenForms.Count - 1; ix > 0; --ix)
Application.OpenForms[ix].Close();
}
Merci beaucoup .. Il fonctionne très bien ....... grand .. – Harikrishna
Y at-il un code comme, frmBallloon est montré dans l'événement de clic btnShow de la frmBase et encore je veux montrer frmBase si l'utilisateur clique sur le btnShow de la frmBalloon puis il ya deux copie de la frmBase.Je ne veux qu'une seule copie.Puis comment puis-je modifier la vue du formulaire en cliquant sur le bouton. – Harikrishna
Je ne peux pas répondre à une question dans une boîte de commentaires. Commencez un nouveau sujet avec cette question. –
Conserve les références de tous les objets de formulaire devant être fermés sur l'événement désigné. Créez et appelez la fonction dans frmBase chaque fois que nécessaire. La fonction sera responsable de fermer tous les formulaires enregistrés si elle est ouverte.
Cela ressemble à un cas observer pattern.
Je veux fermer tous les formulaires mais la forme principale. – Harikrishna
Enregistrez donc les références de seulement les formulaires qui doivent être fermés. –
Comment puis-je enregistrer les références des formulaires ?? – Harikrishna
Observer est approprié avec certains specializaiton. Une version plus spécialisée du modèle d'observateur pour ce type de scénario est le modèle EventAggregator. Le modèle d'agrégateur d'événements est idéal pour ce type de scénario.
En bref, l'agrégateur d'événements vous permet de centraliser la publication/abonnement d'événements. Par conséquent, tous les abonnés et les éditeurs ne parlent que de l'EventAggregator. Les abonnés s'abonnent aux événements et les éditeurs commandent l'agrégateur d'événements pour publier quelque chose.
Le modèle d'agrégateur d'événements découple également chaque abonné d'éditeur l'un par rapport à l'autre. Cela élimine le besoin pour les formulaires enfants de référencer les formulaires parents. Jeremy Miller fournit un bon exemple dans sa série Build Your Own Cab. En raison de ma nouvelle adhésion, je ne peux pas poster les liens vers les sites, mais juste faire une recherche pour les éléments suivants.
EventAggregator par Martin Fowler construire votre propre série CAB par Jeremy Miller (codebetter.com) EventAggregator dans PRISM
Voici un exemple simple que je cuisinais à l'aide de C# et génériques. Ce n'est en aucun cas complet. C'est juste pour illustrer un exemple simplifié. Pour un modèle plus complet, passez à l'exemple de Jeremy Millers.
[code]
// Exemples args événement personnalisé using System;
espace de noms EventAggregatorPatternDemo { CloseAllFormsEventArgs public class: EventArgs { }}
// Formulaire Exemple de code using System; en utilisant System.Collections.Generic; en utilisant System.ComponentModel; en utilisant System.Data; à l'aide de System.Drawing; en utilisant System.Linq; en utilisant System.Text; en utilisant System.Windows.Forms;
espace de noms EventAggregatorPatternDemo { public partial class GraphForm: Formulaire, IListener { GraphForm public() { InitializeComponent(); }
private void GraphForm_Load(object sender, EventArgs e)
{
EventAggregator.GetTheEventAggregator().Subscribe<CloseAllFormsEventArgs>(this);
}
public void Handle<TEventArgs>(TEventArgs e)
{
if (e.GetType() == typeof(CloseAllFormsEventArgs))
{
this.Close();
}
}
private void btnCloseAll_Click(object sender, EventArgs e)
{
EventAggregator.GetTheEventAggregator().Publish(this, new CloseAllFormsEventArgs());
}
private void GraphForm_FormClosed(object sender, FormClosedEventArgs e)
{
EventAggregator.GetTheEventAggregator().CancelSubscription<CloseAllFormsEventArgs>(this);
}
}
}
// événement Code Aggregator using System; en utilisant System.Collections.Generic;
espace de noms EventAggregatorPatternDemo { interface publique IListener { poignée vide (TEventArgs e); }
public class EventAggregator
{
static EventAggregator _TheEventAggregator;
readonly Dictionary<Type, List<IListener>> _listeners;
private EventAggregator()
{
_listeners = new Dictionary<Type, List<IListener>>();
}
public static EventAggregator GetTheEventAggregator()
{
if(_TheEventAggregator == null)
{
_TheEventAggregator = new EventAggregator();
}
return _TheEventAggregator;
}
public void Publish<TEventArgs>(object sender, TEventArgs e)
{
if(_listeners.ContainsKey(e.GetType()))
{
var listOfSubscribers = _listeners[e.GetType()];
for(int i = listOfSubscribers.Count - 1; i > -1; i--)
{
listOfSubscribers[i].Handle(e);
}
}
}
public void Subscribe<TEventArgs>(IListener listener)
{
if(_listeners.ContainsKey(typeof(TEventArgs)))
{
_listeners[typeof(TEventArgs)].Add(listener);
}
else
{
List<IListener> newListenerList = new List<IListener>();
newListenerList.Add(listener);
_listeners.Add(typeof(TEventArgs), newListenerList);
}
}
//Cancels all subscriptions
public void CancelSubscription<TEventArgs>(IListener listener)
{
Type eventArgsType = typeof(TEventArgs);
if (_listeners.ContainsKey(eventArgsType))
{
//Remove from the end
for (int i = _listeners[eventArgsType].Count-1; i > -1; i--)
{
//If the objects are the same
if(ReferenceEquals(_listeners[eventArgsType][i], listener))
{
_listeners[eventArgsType].RemoveAt(i);
}
}
}
}
}
} [/ code]
Avez-vous pensé à utiliser un événement statique? Here est un exemple simple.
- 1. Un seul bouton doit être utilisé dans tous les formulaires
- 2. Comment Vista décide-t-il quels programmes doivent être fermés lorsque la mémoire est insuffisante?
- 3. Comment actualiser l'écran pour que les formulaires fermés disparaissent
- 4. /regexp/sur HTML, mais pas sous forme
- 5. Comment ouvrir une forme de la forme principale en se cachant la principale forme
- 6. Concept de forme principale?
- 7. .Net SvcUtil: les attributs doivent être facultatifs
- 8. Les ensembles d'interopérabilité doivent-ils être signés?
- 9. Les classes ne doivent pas être imbriquées - MXML
- 10. « WAIT » sous forme cache principale forme
- 11. Html Les champs d'entrée doivent être dans la même ligne
- 12. Lorsque vous utilisez un concepteur de formulaires, les étiquettes doivent-elles être nommées?
- 13. Les nombres doivent-ils être localisés?
- 14. Avertissement comme erreur, mais pas tous
- 15. obtenir tous les formulaires ouverts, C#?
- 16. Les cellules ne sont pas nommées dans les feuilles Excel mais les données des cellules doivent toujours être prises
- 17. Pourquoi les tables doivent-elles être réparées?
- 18. Les données jQuery doivent-elles être chaînables?
- 19. Les propriétés doivent-elles être désaffectées?
- 20. Les caractères HTML doivent être supprimés de l'exportation Excel, mais les effets sont préservés
- 21. Django: Rendre tous les formulaires formset requis?
- 22. dans jqgrid, tous les champs doivent être visibles pour apparaître sur l'écran d'édition
- 23. Quitter tous les formulaires quand on ferme
- 24. Les formulaires IntraWeb peuvent-ils être synchronisés à la demande?
- 25. Est-ce que tous les objets de gestion doivent être un service?
- 26. Arrêt de VIM d'ouvrir tous les plis fermés suivants lors de la création d'un nouveau
- 27. Les commentaires Wordpress sont toujours fermés dans les nouveaux messages?
- 28. Tous les fichiers .png doivent-ils être alimentés par deux sur l'Iphone?
- 29. MS ACCESS 2007 - Faire une petite forme pop pas plein écran, quand tous les autres formulaires sont en plein écran
- 30. Quels PEP doivent être lus?
Tout ce que je peux voir, c'est que vous avez beaucoup de formes et de boutons! –
Non il n'y a que trois formes et six boutons – Harikrishna