2011-09-22 9 views
0

C# MDI WinForms 응용 프로그램에서 이상한 동작이 나타납니다. 특정 양식을 다른 양식과 함께 열면이 양식이 잠 깁니다. 어떻게 든이처럼 보이는, 하나에 두 폼의 ControlBox 그룹화 : 양식으로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

이것은 Winforms 어댑터 코드의 MDI 버그입니다. 이 MDI 기본 폼 생성자에서 자식 창을 만들 때 발생합니다. Load 이벤트 (OnLoad)를 대신 사용하십시오. 죽은 그림은 아마도 다른 것일 겁니다. –

답변

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

위의 줄은 모든 컨트롤에 대해 호출되므로 컨트롤 상자가 함께 그룹화됩니다.

양식이 정지되면 양식이 정지되는 하위 양식의 코드를 게시해야합니다. 그럼 내가 너를 더 도울 수있어.

+0

이것은 부분적으로 도움이됩니다. WindowState를 Maximized에서 멀리 떨어 뜨리면 멈추지 않습니다. 그러나 내가 만들지 않더라도 최대화 된 버튼은 다른 폼이 열려있는 동안 사용자가 최대화 버튼을 누르는 것이고, 갑자기 멈추게됩니다. – EursPravus