C#MDI孩子没有出现

时间:2011-11-22 18:49:11

标签: c# winforms 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); 
}

检查是否已经处理掉。如果是这样,重新定义它。然后它调用方法打开正确的表单。这样可以正常工作。

现在有问题的部分: 登录屏幕关闭并且用户登录后,将定义用户级别。我应该能够打开另一个表格。这是我使用的方法:(注意:用户级别工作正常,因为它确实到达了Messagebox)

// 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显示,但表单没有。我真的看不出这个问题。我尝试了我能想到的一切......

1 个答案:

答案 0 :(得分:0)

我认为您需要使用Select()方法将表单放在前面:

尝试将其更改为:

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