2011-09-22 49 views
0

我在c#MDI WinForms應用程序中得到一個奇怪的行爲。當我與任何其他表單一起打開特定表單時,此特定表單將鎖定。不知怎的,它的分組的控制盒的兩種形式爲一體,看起來像這樣:加載mdi winform時奇怪的行爲c#.net

enter image description here

由於形式已停止響應,其不是可關閉並停止繪畫:

enter image description here

奇怪部分是任何其他形式的組合工作正常。表單被裝載在一起,應用程序不會凍結。 但我無法弄清楚與其他人相比,這種形式有什麼不同。所有設置都是相同的。 這是主要的MDIForm是啓動新的子窗體,代碼它從ToolStrip的Button.Click事件稱爲:

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; 
     } 
    } 

把事情陌生人,如果我填寫此表格與數據鎖定,並點擊在打開另一個表單之前,有些控件不會發生錯誤。

我想出下一步要做什麼。

+0

不是你的問題的解決方案,但你的照片只是提醒我這一個:* http://d24w6bsrhbeh9d.cloudfront.net/photo/274060_700b.jpg*:D – Otiel

+0

我什麼都看不到,但我' d在MDI代碼中的任何位置尋找任何遞歸。看起來好像你打開多次相同的表單,這就是「鎖定」你的應用程序。從你所描述的可能是一些被稱爲很多次的事件處理。 –

+0

這是MDI的Winforms適配器代碼中的一個錯誤。當您在MDI主窗體構造函數中創建一個子窗口時,會發生這種情況。改用Load事件(OnLoad)。死的畫可能是別的。 –

回答

0
newForm.WindowState = System.Windows.Forms.FormWindowState.Maximized; 

上述行被稱爲您的所有控件,這會導致控件框被分組在一起。

至於那個凍結的表單,你需要發佈導致表單凍結的子表單的代碼。然後我可以進一步幫助你。

+0

這部分幫助;如果我保持窗體WindowState遠離Maximized,它不會掛起。但即使我不創建它最大化所有需要的是用戶按下最大化按鈕,而另一個窗體打開並突然掛起。 – EursPravus