2010-09-16 7 views
2

J'ai placé un formulaire MDI dans mon application. Si je sélectionne une option du menu Fichier comme Nouveau, un formulaire enfant sera chargé.Comment puis-je rendre un formulaire MDI inactif lorsque le formulaire enfant est actif

Mon code est le suivant pour montrer la forme de l'enfant

private void ShowNewForm(object sender, EventArgs e) 
    { 
     foreach (Form frm in Application.OpenForms) 
     { 
      if (frm.Text == "Main") 
      { 
       IsOpen = true; 
       frm.Focus(); 
       break; 
      } 
     } 
     if (IsOpen == false) 
     { 
      Form childForm = new FrmMain(); 
      childForm.MdiParent = this; 
      childForm.Show(); 
     } 
    } 

Maintenant, ce que j'ai besoin est quand la forme de l'enfant est à l'état actif je voudrais avoir mon MDI inactif jusqu'à ce que et à moins que l'utilisateur ferme l'enfant forme.

En général, pour les formes, nous allons écrire

 frm.showDialog() 

Alors, comment résoudre ce

+0

Je ne comprends pas pourquoi vous avez besoin de formulaires enfants pour être MDI, lorsque vous les utilisez comme des formulaires Dialog? Pourquoi pas childForm.ShowDialog()? – veljkoz

+0

Si j'utilise childform.showdialog() je reçois une erreur car le formulaire qui n'est pas un formulaire de niveau supérieur ne peut pas être affiché comme une boîte de dialogue modale. Supprimez le formulaire de tout formulaire parent avant d'appeler showDialog. – Dotnet

+0

Je ne suis pas sûr que ce soit possible ou pas, mais je pense que votre conception de l'interface utilisateur est intéressante. Je n'ai vu cette approche dans aucune autre application. – anilca

Répondre

3

donnent comme ce

if (IsOpen == false) 
     { 

    Form childForm = new FrmMain(); 
     childForm.TopLevel=true; 
     childForm.ShowInTaskbar=false; 
     childForm.ShowDialog(); 
     } 
+0

Mais le formulaire ne sera pas dans MDI si nous déplaçons le – Dotnet

+0

à droite en donnant TopLevel = true, MDI inactif jusqu'à ce que et à moins que l'utilisateur ferme le formulaire enfant. Mais son ne pas avoir parent MDI –

+0

Mais inorder pour faire le formulaire dans le MDI on ne peut pas faire ça. – Dotnet

2

Ceci est fondamental au sujet de MDI, une forme d'enfant ne peut pas être modal . Vous avez pour utiliser ShowDialog() et assurez-vous de ne pas définir la propriété MdiParent. Un tel dialogue n'est pas limité par les limites du parent MDI, vous pouvez utiliser la propriété StartPosition pour le centrer. Comme ceci:

 using (var dlg = new Form2()) { 
      dlg.StartPosition = FormStartPosition.CenterParent; 
      if (dlg.ShowDialog(this) == DialogResult.OK) { 
       // Use dialog properties 
       //... 
      } 
     } 

Bien sûr, vous n'avez plus besoin de vérifier si le formulaire existe déjà, il est modal.

Questions connexes