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,但没有显示表单。我真的看不出这有什么问题。
我认为你需要包含Select()
方法来将表单带到前面:
试着改成:
private void mForms(Form f) {
if (this.MdiChildren.Contains(f)) {
f.WindowState = FormWindowState.Normal;
f.Select();
} else {
f.MdiParent = this;
f.Show();
}
}