2

我有一个主表单,打开表单A,从表单AI可以打开表单B,从表单BI可以打开表单C。问题是如果我打开到表单B,一切正常,但是如果我打开表单C同样,然后关闭表格C和B,表格A在主表格后面。对于表单,我只是创建表单的一个实例,然后使用.Show()

cNewForm form = new cNewForm();
form.Show();

我为每种形式都这样做

4

3 回答 3

2

您没有正确设置窗口所有权,因为您使用的是Show(). 您需要通过调用Show()接收所有者参数的重载来设置所有者。或者,您可以Owner直接设置属性,但最好在调用Show().

窗口所有者是一个重要的 Win32 概念。我建议阅读有关该主题的MSDN 文档

  • 在 z 顺序中,拥有的窗口始终位于其所有者之上。
  • 当所有者被销毁时,系统会自动销毁拥有的窗口。
  • 拥有的窗口在其所有者最小化时被隐藏。

在您的情况下,我认为您希望表格 A 归主表格所有,表格 B 归表格 A 拥有,表格 C 归表格 B 所有。

于 2013-01-31T13:37:23.687 回答
1

我经常发现这些类型的问题可以通过将所有者分配给 windows 来解决。当您显示窗口时:

FormA formA = new FormA();
formA.Show(this); // assuming this code is in the main form
于 2013-01-31T13:35:16.793 回答
0

尝试使用ShowDialog();方法而不是将show()其显示为模态形式。见文档

于 2013-01-31T13:34:03.030 回答