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
Deux options, en fonction de ce dont vous avez besoin:
Utilisation
ShowDialog
au lieu deShow
, 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.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.
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.
faire quelque chose comme:
SingleForm myform = null;
void ShowMyForm_Click(object sender, EventArgs e)
{ if (myform == null)
{
myform = new SingleForm();
}
myform.Show();
myform.BringToFront();
}
Forcé objet formulaire pour adhérer au modèle singleton
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
}
- 1. Rendu plusieurs instances Formulaire
- 2. Comment empêcher l'ouverture du formulaire plusieurs fois
- 3. Empêcher l'ouverture de plusieurs instances de l'application VB
- 4. Comment empêcher mon enregistreur d'écrire plusieurs instances d'un fichier journal?
- 5. Plusieurs instances de jQuery.noConflict()
- 6. jquery datepicker plusieurs instances
- 7. Affichage de plusieurs instances de même forme?
- 8. plusieurs instances de Dynamic modalpopupextender
- 9. plusieurs instances de pièces importées
- 10. Plusieurs instances (2) de Zend_Auth
- 11. Avantages de plusieurs instances memcached
- 12. plusieurs instances de statique Singleton
- 13. Plusieurs instances de simulateur iPhone?
- 14. Exécution de plusieurs instances d'Evince
- 15. Configuration de plusieurs instances UIImageView
- 16. Bibliothèque CodeIgniter plusieurs instances
- 17. Comment puis-je empêcher plusieurs instances de lignes ajoutées dans une liste?
- 18. Plusieurs instances de CKEditor (dans Safari)
- 19. Plugin jquery boxy: empêcher plusieurs instances de la même boîte de dialogue lorsque vous cliquez plusieurs fois sur le lien
- 20. log4j avec plusieurs instances WebLogic
- 21. CodeIgniter - plusieurs instances d'un modèle
- 22. Comment concaténer plusieurs instances MvcHtmlString
- 23. 3.x ExtJs plusieurs instances
- 24. Déploiement sur plusieurs instances Heroku
- 25. Restreindre plusieurs instances d'une application
- 26. Jquery-ui autocomplete plusieurs instances
- 27. Plusieurs instances userControl dans tabControl
- 28. Interface graphique Java et plusieurs instances de la classe SwingWorker
- 29. Script d'onglets de base jQuery - plusieurs instances?
- 30. plusieurs instances de la fonction php
c'est mieux, mais cela n'empêche pas l'utilisateur de ramener accidentellement ou délibérément la forme principale à l'avant. –
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
J'allais ajouter le .ShowDialog() comme une autre option mais John K. & Johannes m'a battu à elle – IAbstract