2014-12-12 12 views
1

개요 :MDI 자식 폼을 앞으로 가져 오는 방법?

다른 폼을로드하는 MDI 상위 폼이 있습니다. 두 번째 양식을로드 한 후에 더 이상 첫 번째 양식을 가져올 수 없습니다.

설명 : I 2 개 메뉴 항목을 포함하는 메뉴 스트립이 상위 폼

; 집과 검색. 각 클릭 이벤트는 해당 양식이 이미로드되어 있지 않으면 해당 양식을로드합니다.

문제 :

가. 검색을 클릭하십시오. 그런 다음 홈을 클릭하십시오.

b. 검색을 다시 한 번 클릭하면 이미 열려있는 해당 양식이 더 이상 앞으로 나오지 않습니다.

private void tsmHome_Click(object sender, EventArgs e) 
    { 
     // Loop through all open forms... 
     foreach (Form form in Application.OpenForms) 
     { 
      // If frmHome is Opened, set focus to it and exit subroutine. 
      if (form.GetType() == typeof(frmSearch)) 
      { 

       form.Activate(); 
       return; 
      } 
     } 

     // If frmHome is not Opened, create it. 
     frmHome f = new frmHome(); 
     f.MdiParent = this; 
     f.Show(); 
    } 

    private void tsmSearch_Click(object sender, EventArgs e) 
    { 
     // Loop through all open forms... 
     foreach (Form form in Application.OpenForms) 
     { 
      // If frmSearch is Opened, set focus to it and exit subroutine. 
      if (form.GetType() == typeof(frmSearch)) 
      { 

       form.Activate(); 
       return; 
      } 
     } 

     // If frmSearch is not Opened, create it. 
     frmSearch f = new frmSearch(); 
     f.MdiParent = this; 
     f.Show(); 
    } 
+0

내가 주석으로 처리하면 나타납니다. // return; 의도 한대로 작동하지만 동일한 유형의 새로운 형식을 만듭니다. 생각? – ASPiRE

+0

그랜트. 사용자가 메뉴 항목을 클릭하고 해당하는 이미 열어 놓은 양식을 앞에 가져야합니다. – ASPiRE

+0

난 네 이름이 싫어. 그게 전부입니다. ;) –

답변

3

코드는 당신이 가지고

당신의 tsmHome_Click 이벤트 처리기에서 한 줄을 변경 한 후 .. 나를 위해 노력하고 있습니다.

if (form.GetType() == typeof(frmSearch)) 

해야합니다.

if (form.GetType() == typeof(frmHome)) 

복사본 붙여 넣기 오류가 발생했습니다.

+0

오, 이런 ... 나는 .. 무슨 말을 해야할지 모르겠다. 와우 .. 그게 다야. – ASPiRE

+0

눈의 두 번째 세트가 도움이 될 수 있습니다. :) –

0

당신은 몇 가지 옵션을 시도 할 수 있습니다 :

f.TopMost = true; 
f.BringToFront(); 

또한, 당신은 대화 모드에서 창을 열 수 있습니다 :이 도움이 될 것입니다

f.ShowDialog(); 

희망을. 안부 인사,

0

양식이 존재하는 경우 앞에 가져 오면이 코드를 변경할 수 있습니다.

// Loop through all open forms... 
    foreach (Form form in Application.OpenForms) 
    { 
     // If frmSearch is Opened, set focus to it and exit subroutine. 
     if (form.GetType() == typeof(frmSearch)) 
     { 

      form.Activate(); 
      form.BringToFront(); 
      //form.WindowState = FormWindowState.Maximized; 
      return; 
     } 
    } 

    // If frmSearch is not Opened, create it. 
    frmSearch f = new frmSearch(); 
    f.MdiParent = this; 
    f.Show(); 
+0

BringToFront()가 작동하지 않습니다. 생각? – ASPiRE