Comment éviter les Multiples formes d'Enfants indiqué dans MDIParent C# Win Formes
Je veux éviter que mon enfant forme d'apparaître à de nombreuses reprises lorsqu'un utilisateur essaie d'ouvrir le formulaire enfant qui est déjà ouvert dans MDIParent. Une manière d'éviter cela est de désactiver le Contrôleur (dans mon cas, le BOUTON) mais j'ai donné une touche de raccourci (Ctrl+L) pour cette fonction. Donc, si l'utilisateur tape Ctrl+L, le même enfant, le Formulaire s'ouvre et je peux voir deux formes d'enfants sont dans le MDI.
private void leadsToolStripMenuItem_Click(object sender, EventArgs e)
{
frmWebLeads formWeblead = new frmWebLeads();
formWeblead.MdiParent = this;
formWeblead.WindowState = System.Windows.Forms.FormWindowState.Maximized;
formWeblead.Show();
}
Je veux éviter cela. Comment puis-je faire cela?
Dans l'image vous pouvez voir que l'enfant d'un Nom de formulaire Prospects en Ligne est ouvert deux fois que l'utilisateur a ouvert première fois à l'aide du Menu (CONDUIT) et la deuxième fois par la touche de Raccourci. Je ne veux pas que cela se produise. Si le formulaire est déjà ouvert, il devrait éviter d'en ouvrir une autre de même forme ... Comment faire?
OriginalL'auteur panindra | 2011-07-12
Vous devez vous connecter pour publier un commentaire.
la façon dont j'ai l'habitude de le faire si je ne suis censé avoir un ouvert est quelque chose comme:
OriginalL'auteur shelleybutterfly
Dans votre formulaire de fonction main ()
et c'est le code de la passe à l'intérieur de votre menu de la bande de la nappe de l'événement
OriginalL'auteur raghu
je suis à l'aide .net 3.5 et visual studio 2010 Ultimate ,Windows Xp ..est-ce cousing erreur
OriginalL'auteur Joe
Personnellement, je préfère un générique de mise en œuvre:
Alors vous pouvez simplement l'utiliser comme ceci:
Où myForm est le TYPE de formulaire que vous souhaitez créer
J'imagine que toute charge supplémentaire serait négligeable. Il ne fonctionne que lorsque vous essayez d'ouvrir un formulaire, sauf si vous êtes ouverture des tonnes de formes à la fois, je ne peux imaginer que cela aurait une incidence sur les performances de votre application ou de l'expérience de l'utilisateur.
Ce qui est bon. Je suppose que, dans un évolutive de l'application, vous pouvez utiliser votre Conteneur IoC de toute façon, au lieu de compter sur la
Activator
. J'ai utilisé cette méthode avec RadDock maintenant, pour garder une trace de MDI Enfants, et l'Outil de Windows. J'ai pris laShow()
etActivate()
, et renvoyé la forme brute, comme le type deT
, de sorte qu'il peut être bloquée en cas de besoin.Nice. Refroidir la solution. Merci pour les commentaires. Content d'avoir pu partager quelque chose que quelqu'un d'autre pourrait utiliser 🙂
OriginalL'auteur Dave Coates
OriginalL'auteur Lakmali Vithanage
Poings temps lorsque vous ouvrez le formulaire dans le menu, la variable frmRep est null
...j'ai donc ajouter un autre "si" à l'intérieur du premier "si" pour valider mon formulaire est visible, parce que j'ai un autre formes, puis si elle n'est pas visible-je faire un exemple et de montrer la forme, mais si c'est visible, je viens de l'utiliser Activate()
OriginalL'auteur Mario Arispuro
Le plus simple est de conserver une référence à l'enfant la forme, et seulement frayer un nouveau s'il n'existe pas déjà. Quelque chose comme ceci:
Vous avez également besoin de code pour définir formWeblead null lorsque vous le fermez, mais je suis sûr que vous pouvez comprendre cette partie 🙂
Je ne pense pas que je voudrais utiliser le Laissant événement, car c'est un accent chose. Au lieu de cela, utilisez le formulaire enfant de Clôture de l'événement, qui se déclenche lorsque vous le fermez.
Ceci laisse un peu de TODO concernant l'élément de menu qui appelle l'événement click, je tiens à désactiver l'élément de menu qui a créé le formulaire d'éviter toute confusion pour l'utilisateur, par exemple "je suis en cliquant sur "ouvrir" et rien ne se passe".
Eh bien, c'est sûr. Mais c'est en dehors de la portée de la question. Il n'est pas difficile de comprendre où insérer le
.Enabled = false
et.Enabled = true
code. Ou, mieux encore, leformWeblead.Focus()
code.OriginalL'auteur Mike Caron
Aurait été sympa d'utiliser les sémaphores au lieu de cela, afin de permettre à 1-n instances d'exister.
OriginalL'auteur gangelo
Ici est la "Méthode" que j'ai créé pour l'Appel à l'ouverture d'un seul formulaire, quand u cliquez sur le Menu dans MDIParent. Espérons que cette "Méthode" peut vous aider!
Utilisation: Sur La Même ToolStripMenuItems.
OriginalL'auteur KAKAworld2012
Vous pouvez le vérifier actuelle ouvrir les formulaires de réaliser que:
OriginalL'auteur Brinda
J'utilise cette solution, avec un peu d'astuce
OriginalL'auteur huncyrus
OriginalL'auteur Mehmet Altunbaş
Le code qui empêche l'enfant de formulaire dans un formulaire MDI
OriginalL'auteur Alan John Thomas
Façons les plus simples de la prévention de plusieurs instances de l'enfant:
Puis l'appeler comme ceci:
OriginalL'auteur Ericson B. Sudara
la simpleist des moyens de prévention des instances multiples de l'enfant
OriginalL'auteur Ericson B. Sudara