【发布时间】:2014-01-19 08:37:30
【问题描述】:
WinForm
public Form1()
{
Form2 obj = new Form2();
obj.show(); //shows form2
this.Close(); //exception crash: because constructor has not yet called `new Form1.show()`
}
在Winform
- 'this.close()' 将通过异常和崩溃(无法处理未初始化的对象)
- 如果我不在 Form1 中调用
.close,并且我关闭(X)Form1,Form2 也会被关闭,因为它是 Form1 中的一个实例
在WPF,相同的代码:
- 'this.close()' 不会通过异常
- 如果 Form1 关闭,Form2 将作为 MainWindow 保持打开状态。
Why is the Difference?
(编辑) 我知道在 Winform 中我无法在构造函数中关闭相同的表单,因为它尚未创建,但 how is WPF differ with it in constructor call?。
如果我想让所有子窗口在父窗口关闭时关闭,WinForm 方式?
【问题讨论】:
-
在 WinForms 中,考虑使用 InitializeControls/FormLoaded 而不是在构造函数中创建控件(尤其是尝试关闭同一个表单)。
-
在 WPF 中,您正在关闭 Window 或 UserControl?
-
@RohitVats 在 WPF 中我正在关闭窗口
-
@grantnz 正如我所提到的,我已经知道我无法在构造函数中关闭表单,因为它尚未在 WinForm 中创建,我的问题是它与 WPF 有何不同,关闭时不会出错并且不是父级在构造函数中创建的窗口。