我有一个窗口窗体项目,我有一个登录屏幕、一个菜单和几个其他窗体,我在它们之间切换:
this.Hide();
frm.FormClosed += new FormClosedEventHandler(subFormClosed);
frm.Show();
和 FormClosedEventHandler(subFormClosed);
private void subFormClosed(object sender, FormClosedEventArgs e)
{
this.Close();
}
所以这样做的目的是当用户关闭子表单时关闭它。
但是有一个问题,我想返回菜单,问题是我有两种可能性之一,我可以看到:
我可以通过引用将菜单表单传递给子表单,然后显示它并隐藏子表单 - 这似乎是一种非常笨拙的方法,但它会起作用。
我可以只打开一个新版本的菜单表单——这会在过度使用时导致巨大的内存问题(创建更多实例然后在程序关闭之前永远不会销毁,例如 30 个菜单表单子(monad)表单)
我试图使用 CloseReason 来检查子表单是否被用户关闭或者它是否被代码关闭,但是退出按钮和 this.Close()
都返回 CloseReason.UserClosing
。因此,我无法区分这两种退出方式。
所以基本上我要问的是有没有更好的方法来做到这一点,我已经阅读了有关 MDI 和 SDI 的内容,但我无法真正弄清楚哪个适用,或者笨拙的选项 1 是否是最好的这样做的方式。
最佳答案
您可以使用 ShowDialog 并将菜单页面作为所有者传递。像这样:
在菜单中:
// on menu navigation button click
this.hide();
SubForm sub = new SubForm();
sub.ShowDialog(this); // open as a dialog with this form as the owner
在子表单中:
// on subform's back button click or better, in the FormClosing event
this.Owner.show();
this.Close(); // this line is not needed if implemented in FormClosing event
关于c# - Windows 窗体程序中的多个 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33766836/