2010-08-04 9 views
0

J'ai un formulaire mdicontainer qui invoque des formulaires. Mon problème est quand l'utilisateur clique de nouveau sur le menu pour ce formulaire, il en fait aussi une autre instance. Ce que j'ai fait est de déclarer une classe publique avec une variable publique ex: Boolean isFormOneOpen = false. Puis, à chaque fois que formOne s'ouvre, il vérifie d'abord la variable globale que j'ai déclarée il y a un certain temps si elle est fausse, si c'est le cas, instancie un objet d'un formOne et ensuite l'affiche. Sinon, ne faites rien. Très statique, imaginez si j'ai plusieurs formulaires, je dois déclarer une variable pour chaque formulaire afin de vérifier si elle est déjà ouverte. Pouvez-vous me fournir une solution pour cela? Peut-être une méthode qui accepte un formulaire? Ou une façon plus intelligente de le faire.Comment créer un formulaire d'instance unique

Répondre

2

Vous n'avez pas besoin d'une variable, vous pouvez itérer la collection MdiChildren pour voir si le formulaire est déjà ouvert. Par exemple:

Private Sub btnViewChild_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnViewChild.Click 
    For Each child In Me.MdiChildren 
     If TypeOf child Is Form2 Then 
      child.WindowState = FormWindowState.Normal 
      child.Focus() 
      Exit sub 
     End If 
    Next 
    Dim frm As New Form2 
    frm.MdiParent = Me 
    frm.Show() 
End Sub 

La solution VB.NET centrée sur:

Private Sub btnViewChild_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnViewChild.Click 
    Form2.MdiParent = Me 
    Form2.WindowState = FormWindowState.Normal 
    Form2.Show 
End Sub 
+0

merci ... Je viens de faire quelques réglages dans votre code, et ça marche! Je vous remercie :) – yonan2236

0

Plutôt qu'un booléen, déclarez une variable du type de la forme. Ensuite, assurez-vous que la variable n'est pas Nothing et appelez la méthode .Open(). Cela a le bon effet secondaire de mettre également votre instance de formulaire existante à l'avant si elle est déjà ouverte.

Encore mieux, dans VB.Net 2.0 et versions ultérieures, tous les formulaires ont une instance par défaut avec le même nom que leur type, vous pouvez donc simplement dire FormName.Open() et en avoir terminé avec. Cependant, je n'ai pas essayé cela dans une situation de MDI avant.

+0

OK. Merci, je vais essayer ce que vous dites. – yonan2236

Questions connexes