2011-11-22 59 views
0

我正在使用一種方法,我會有很多孩子的形式。現在,當我通過單擊按鈕來調用表單時,它會顯示,但在登錄子進程關閉後不會顯示。C#MDI孩子沒有顯示

方法:

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

這只是簡單的檢查,如果MDIcontainer已經包含請求的形式。如果是,則將其重新裝回(如果不是最小化),則顯示它。

現在我可以調用使用這個形式:

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

    mForms(add_student); 
} 

此檢查它是否已經或不配置。如果是的話,重新定義它。然後它調用該方法來打開正確的表單。這工作,因爲它應該。

現在問題部分: 登錄屏幕關閉並且用戶登錄後,定義了用戶級別。我應該可以打開另一個表格。這是我用的方法:(注:userlevels做工精細,因爲它確實達到了消息框)

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

現在,你覺得這應該工作。我不必重新定義它,因爲它是第一次打開並且已經預定義。 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我將它添加到帖子中。我使用這個: 窗體start_screen_admin = new start_screen_admin(); –