2011-09-22 5 views
0

Je rencontre un comportement étrange dans une application C# MDI WinForms. Lorsque j'ouvre un formulaire spécifique avec n'importe quel autre formulaire, ce formulaire spécifique se bloque. D'une certaine façon le regroupement ControlBox des deux formes en une seule, qui ressemble à ceci:Comportement étrange lors du chargement de mdi winform C# .net

enter image description here

Comme les formes a cessé de répondre, ce ne est pas refermable et a cessé de peindre:

enter image description here

L'étrange une partie est que toute autre combinaison de formes fonctionne bien. Les formulaires sont chargés les uns sur les autres et l'application ne gèle pas. Mais je ne peux pas comprendre ce qui est différent de ce formulaire par rapport aux autres. Tous les paramètres sont identiques. Voici le code dans la principale MDIForm qui initient de nouvelles formes de l'enfant, elle est appelée d'un événement Button.Click ToolStrip:

private void OpenForm(object sender) 
    { 
     if (sender == null) return;    
     ToolStripMenuItem itemSender = (ToolStripMenuItem)sender; 

     try 
     { 
      WinForm mapping = (WinForm)itemSender.Tag; 

      if (!FormList.ContainsKey(mapping.FormName)) 
      { 
       Type frmType = Type.GetType(string.Format("OrderAssist.Forms.{0}", mapping.FormName)); 
       if (frmType != null) 
       { 
        Form newForm = (Form)Activator.CreateInstance(frmType); 
        if (!newForm.IsDisposed) 
        { 
         newForm.Name = mapping.FormName; 
         newForm.Tag = itemSender; 
         newForm.MdiParent = this; 
         newForm.Show(); 
         newForm.WindowState = System.Windows.Forms.FormWindowState.Maximized; 
         newForm.FormClosing += new FormClosingEventHandler(newForm_FormClosing); 
         FormList.Add(newForm.Name, newForm); 
         itemSender.Checked = true; 
         newForm.Activate();       
        } 
       } 
       else 
        itemSender.Enabled = false; 
      } 
      else 
       FormList[mapping.FormName].Activate(); 
     } 
     catch (Exception e) 
     { 
      Exceptions.ProgramException(e, Settings.User.ID, "Exception occured while opening a form."); 
      if (itemSender != null) 
       itemSender.Enabled = false; 
     } 
    } 

Pour rendre l'étranger de la matière, si je remplir ce formulaire qui se verrouille avec des données et cliquez sur certains contrôles à l'intérieur, avant d'ouvrir un autre formulaire, l'erreur ne se produit pas.

Je ne sais plus quoi essayer.

+0

Pas une solution à votre problème, mais votre image me rappelle juste celle-ci: * http: //d24w6bsrhbeh9d.cloudfront.net/photo/274060_700b.jpg*: D – Otiel

+0

Je ne vois rien, mais je ' d chercher dans n'importe quelle récursion n'importe où dans votre code MDI. Il semble vraiment que vous ouvrez la même forme BEAUCOUP de fois et c'est ce qui «verrouille» votre application. d'après ce que vous décrivez, il pourrait s'agir d'un traitement d'événement qui est appelé tant de fois. –

+0

Il s'agit d'un bogue dans le code de l'adaptateur Winforms pour MDI. Cela se produit lorsque vous créez une fenêtre enfant dans le constructeur de formulaire principal MDI. Utilisez l'événement Load (OnLoad) à la place. La peinture morte est probablement autre chose. –

Répondre

0

La ligne ci-dessus est appelée pour tous vos contrôles, ce qui entraîne le regroupement des boîtes de contrôle. En ce qui concerne le gel de cette forme, vous devez afficher le code du formulaire enfant qui provoque le gel du formulaire. Ensuite, je peux vous aider plus loin.

+0

Cela aide partiellement; si je garde les formulaires WindowState loin de Maximized, il ne se bloque pas. Mais même si je ne le crée pas Maximized tout ce dont vous avez besoin est pour l'utilisateur d'appuyer sur le bouton Agrandir tandis qu'un autre formulaire est ouvert et tout à coup il se bloque. – EursPravus

Questions connexes