2010-02-01 8 views
6

Comment empêcher l'ouverture de plusieurs formulaires? Je fais .show sur le formulaire mais l'utilisateur peut cliquer à nouveau sur le formulaire principal et le bouton et une autre instance de formulaire s'ouvre.Empêcher plusieurs instances de formulaire

Répondre

2

Deux options, en fonction de ce dont vous avez besoin:

  1. Utilisation ShowDialog au lieu de Show, qui ouvrira une fenêtre modale. C'est la solution évidente si vous n'avez pas besoin que votre formulaire principal soit actif lorsque le formulaire enfant est ouvert.

  2. Ou gardez trace de la fenêtre que vous avez déjà ouverte dans le formulaire principal et ne faites rien si elle est déjà ouverte. Cela sera nécessaire si vous voulez que l'utilisateur puisse utiliser le formulaire principal alors que le formulaire enfant est déjà ouvert, peut-être pour ouvrir d'autres formulaires.

0

Désactiver le formulaire principal jusqu'à ce que le formulaire enfant disparaisse ou désactiver le bouton.

button_onClick(object Sender, EventArgs e) 
{ 
    Button btn = sender as Button; 
    btn.Enabled = false; 
    Form myform = new MyForm(); 
    myform.Show(); 
} 

Bien sûr, vous devriez vraiment utiliser form.ShowDialog() plutôt que form.Show() si vous voulez comportement modal.

2

faire quelque chose comme:

SingleForm myform = null; 

void ShowMyForm_Click(object sender, EventArgs e) 
{  if (myform == null) 
     { 
      myform = new SingleForm(); 
     } 
     myform.Show(); 
     myform.BringToFront(); 
} 
+0

c'est mieux, mais cela n'empêche pas l'utilisateur de ramener accidentellement ou délibérément la forme principale à l'avant. –

+0

il n'a pas dit que la forme principale devait rester en arrière-plan ... il ne voulait simplement pas que l'utilisateur puisse ouvrir un autre formulaire quand le bouton a été cliqué ...;) Mais merci pour les modifications. .. oh ... j'ai mal lu je suppose. Je pensais qu'il y avait une deuxième forme qui a été ouverte quand un bouton a cliqué ... idk – IAbstract

+0

J'allais ajouter le .ShowDialog() comme une autre option mais John K. & Johannes m'a battu à elle – IAbstract

1

Forcé objet formulaire pour adhérer au modèle singleton

0

Je préfère utiliser Génériques et le chargement paresseux pour gérer mes formes. Puisque tous mes formulaires héritent d'une classe de base, je peux utiliser la même méthode pour amener les formulaires au premier plan, les envoyer à l'arrière, les détruire, les démarrer, etc.

Si vous conservez une classe de gestionnaire de formulaires responsable de la gestion de tous les formulaires chargés, vous pouvez apporter n'importe quelle forme à l'avant que vous voulez, ou empêcher des formulaires spécifiques de pouvoir revenir à moins que certains critères sont remplies.

public void LoadForm<T>() where T : MyNameSpace.MyBaseForm 
{ 
    // Load all your code in this joint and just call it when you 
    // need a form. In here, you can determine if a copy of the form 
    // already exists and then bring it forward or not 
} 
Questions connexes