c# MDI子节点未显示

本文关键字:显示 子节点 MDI | 更新日期: 2023-09-27 18:15:22

我正在使用一个方法,因为我将有很多子窗体。现在,当我通过单击按钮调用表单时,它确实会显示,但在login子窗口关闭后,它不会显示。

方法:

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,但没有显示表单。我真的看不出这有什么问题。

c# MDI子节点未显示

我认为你需要包含Select()方法来将表单带到前面:

试着改成:

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