2011-09-22 29 views
0

- 私はC#のMDI WinFormsのアプリケーションで奇妙な行動を取得、MDI WinフォームのC#.NETをロードします。他のフォームと一緒に特定のフォームを開くと、この特定のフォームがロックされます。どういうわけかそのはこのように見て、一つに両方のフォームのControlBoxをグループ化:フォームとして奇妙な行動

enter image description here

はその閉鎖可能ではない、応答を停止していると絵を停止しました:

enter image description here

奇妙なフォームの他の組み合わせがうまく動作するということもあります。フォームは互いに重なってロードされ、アプリケーションはフリーズしません。 しかし、私は他のものと比較してこの形式について何が違うのか理解できません。すべての設定は同じです。 これは、そのToolStripのButton.Clickイベントから呼ばれる新しい子フォームを、開始メインMDIFormの内のコードです:私はデータをロックし、このフォームを移入し、をクリックすると、問題の見知らぬ人を作るために

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

なく、あなたの問題を解決するに、しかし、あなたの写真はこの1つだけのことを思い出し:*のhttp://d24w6bsrhbeh9d.cloudfront.net/photo/274060_700b.jpg*:D – Otiel

+0

を私は何を見ることができないが、私は」 dあなたのMDIコード内の任意の再帰を探します。同じフォームをたくさん開いているような気がします。それがあなたのアプリケーションを「ロックする」ものです。あなたが何を記述しているのかは何度も呼ばれているイベント処理かもしれません。 –

+0

WinformsアダプタコードのMDIのバグです。これは、MDIメインフォームコンストラクタで子ウィンドウを作成するときに発生します。代わりにLoadイベント(OnLoad)を使用します。死んだ絵はおそらく別のものです。 –

答えて

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

上記の行はすべてのコントロールに対して呼び出され、結果としてコントロールボックスがグループ化されます。

がフリーズそのフォームについては、フォームのフリーズの原因と子フォームのコードをポストする必要があります。それから私はあなたをさらに助けることができます。

+0

これは部分的に役立ちます。フォームのWindowStateをMaximizedから離しておくと、ハングしません。しかし、私はそれを作成しない場合でも、最大化は、別のフォームが開いている間、ユーザーが最大化ボタンを押して突然それがハングアップすることです。 – EursPravus