形成失去焦点的c#

时间:2013-01-31 13:29:22

标签: c#

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

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

我为每个表单执行此操作

3 个答案:

答案 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