C#MDI子级未显示
我正在使用一种方法,因为我将有很多子窗体。现在,当我通过单击按钮调用表单时,它确实会显示出来,但在登录子项关闭后不会显示 方法:C#MDI子级未显示,c#,winforms,mdi,C#,Winforms,Mdi,我正在使用一种方法,因为我将有很多子窗体。现在,当我通过单击按钮调用表单时,它确实会显示出来,但在登录子项关闭后不会显示 方法: private void mForms(Form f) { if (this.MdiChildren.Contains(f)) { f.WindowState = FormWindowState.Normal; } else { f.MdiParent = this; f.Show();
private void mForms(Form f)
{
if (this.MdiChildren.Contains(f))
{
f.WindowState = FormWindowState.Normal;
}
else
{
f.MdiParent = this; f.Show();
}
}
这只是检查MDI容器是否已经包含请求的表单。如果是,将其重新放回(以防最小化),如果不是,则显示它
现在我可以使用以下命令调用表单:
private void ts_bestand_studenten_add_Click(object sender, EventArgs e)
{
if (add_student.IsDisposed)
{
add_student = new add_student();
}
mForms(add_student);
}
这将检查它是否已被处置。如果是,请重新定义它。然后调用该方法打开正确的表单。这是应该的
现在有问题的部分是:
关闭登录屏幕并登录用户后,将定义userlevel。我应该可以打开另一张表格。这就是我使用的方法:(注意: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();
}
}
没有区别。正如我在帖子中所说:调用表单的方法与其他表单完美配合。当我在登录关闭时调用它时,它不会显示,甚至不会最小化。@Rune我无法复制它。您没有在创建的位置显示代码
start\u screen\u admin
——可能是问题所在。另外,尽量避免调试MessageBox——它可能会干扰GUI。@Lars_Tech我在帖子中添加了它。我使用这个:Form start\u screen\u admin=new start\u screen\u admin()@你能在没有mForms方法的情况下显示start\u screen\u admin吗?如果问题只发生在该窗体上,那么请检查属性、构造函数方法以及该窗体上可能存在干扰的任何事件。我找不到发布的代码有任何错误。@Lars_Tech我查看了表单的设计器部分>无。它可以显示为普通表单或对话框,但作为普通表单,它会立即跳转到MDI容器后面。我想这可能是问题所在,但我不知道为什么。
private void mForms(Form f) {
if (this.MdiChildren.Contains(f)) {
f.WindowState = FormWindowState.Normal;
f.Select();
} else {
f.MdiParent = this;
f.Show();
}
}