2011-11-22 6 views
0

나는 방법을 사용하고 있습니다. 나는 자식 폼을 많이 가질 것입니다. 이제는 버튼을 클릭하여 양식을 호출 할 때 표시되지만 로그인 하위가 닫힌 후에는 표시되지 않습니다.C# MDI 자식이 표시되지 않습니다.

방법 :

MDIcontainer 이미 요청 양식을 포함하는 경우이 그냥 단순히 확인
private void mForms(Form f) 
{ 
    if (this.MdiChildren.Contains(f)) 
    { 
     f.WindowState = FormWindowState.Normal; 
    } 
    else 
    { 
     f.MdiParent = this; f.Show(); 
    } 
} 

. 예인 경우 다시 올려 놓으십시오 (최소화 된 경우를 대비하여). 그렇지 않은 경우 표시하십시오.

지금은이를 사용하여 양식을 호출 할 수 있습니다

private void ts_bestand_studenten_add_Click(object sender, EventArgs e) 
{ 
    if (add_student.IsDisposed) 
    { 
     add_student = new add_student(); 
    } 

    mForms(add_student); 
} 

이 검사가 이미 여부에 배치됩니다. 그렇다면 다시 정의하십시오. 그런 다음 올바른 양식을 여는 메소드를 호출합니다. 이것은 정상적으로 작동합니다.

이제 문제가있는 부분 : 로그인 화면이 닫히고 사용자가 로그인하면 사용자 수준이 정의됩니다. 다른 양식을 열 수 있어야합니다.

// Predefines start_screen_admin 
Form start_screen_admin = new start_screen_admin(); 

public void mCommitRights() 
{ 
    if (userlevel.gCheckLevel == 0) 
    { 
     // Admin, no changes 
     MessageBox.Show("Admin"); 
     mForms(start_screen_admin); 
    } 
    ... more of the same to check for userlevels 
} 

지금 당신이이 일을해야한다고 생각 : (이 메시지 박스에 도달 않기 때문에 userlevels가 잘 작동 참고) 이것은 내가 그것을 위해 사용하는 방법입니다. 처음으로 열리고 이미 미리 정의되어 있기 때문에 다시 정의 할 필요가 없습니다. MessageBox가 표시되지만 양식은 표시되지 않습니다. 나는이 문제를 실제로 볼 수 없다. 내가 생각할 수있는 ..

답변

0

을 모든 노력을 당신이 전면에 양식을 가져 오는 Select() 방법을 포함 할 필요가 있다고 생각 :

이로 변경합니다 :

private void mForms(Form f) { 
    if (this.MdiChildren.Contains(f)) { 
    f.WindowState = FormWindowState.Normal; 
    f.Select(); 
    } else { 
    f.MdiParent = this; 
    f.Show(); 
    } 
} 
+0

차이를. 내 게시물에 명시된 것처럼 : 양식을 호출하는 방법은 다른 양식과 완벽하게 작동합니다. 로그인이 닫히면 전화를 걸 때 표시되지 않으며 최소화되지도 않습니다. –

+0

@Rune 재현 할 수 없습니다. 'start_screen_admin' 파일을 만들 때 코드가 표시되지 않습니다. 아마도 문제가있을 수 있습니다. 또한 MessageBoxes로 디버깅을 피하십시오. GUI를 방해 할 수 있습니다. – LarsTech

+0

@Lars_Tech 나는 그것을 포스트에 올렸다. 나는 이것을 사용한다 : Form start_screen_admin = new start_screen_admin(); –

관련 문제