我有一个主窗体,打开表单A,从表单AI可以打开表单B,从表单BI可以打开表单C.问题是,如果我打开直到表单B,一切正常,但如果我打开表格C,然后关闭表格C和B,表格A在主表格后面。对于表单,我只是创建表单的实例,然后使用.Show()
cNewForm form = new cNewForm();
form.Show();
我为每个表单执行此操作
答案 0 :(得分:2)
您没有正确设置窗口所有权,因为您使用的是Show()
的无参数版本。您需要通过调用接收所有者参数的Show()
重载来设置所有者。或者,您可以直接设置Owner
属性,但在拨打Show()
时这样做会好得多。
窗口所有者是一个重要的Win32概念。我建议您阅读有关该主题的MSDN documentation。
- 拥有的窗口始终位于z订单的所有者之上。
- 系统会在其所有者被销毁时自动销毁拥有的窗口。
- 拥有的窗口在其所有者最小化时隐藏。
在您的情况下,我认为您希望表单A由您的主表单拥有,表单B由表单A拥有,表单C由表单B拥有。
答案 1 :(得分:1)
我经常发现通过将所有者分配给Windows来解决这些问题。当您显示窗口时:
FormA formA = new FormA();
formA.Show(this); // assuming this code is in the main form
答案 2 :(得分:0)
尝试使用ShowDialog();
方法代替show()
,以便将其显示为模式形式。请参阅documentation