有这样两个窗体:
class Form1()
{
}class Form2()
{
public string name;
}其中窗体1中有一个按钮,给按钮注册如下事件:
Form2 frm=new Form2();
if(frm.ShowDialog() == DialogResult.OK)
{
MessageBox.Show(frm.name);
}问题来了,当给frm的DialogResult赋值为DialogResult.OK后,frm自动关闭,但是既然还可以访问到这个frm,这是什么原因?我开始以为是因为这个窗口并没有关闭,只是隐藏起来了,可是当我通过close或者dispose来关闭这个frm时(这时只要把if判断语句改成frm.ShowDialog() == DialogResult.Cancel)就行了),仍然可以访问到这个frm,这是什么原因?
class Form1()
{
}class Form2()
{
public string name;
}其中窗体1中有一个按钮,给按钮注册如下事件:
Form2 frm=new Form2();
if(frm.ShowDialog() == DialogResult.OK)
{
MessageBox.Show(frm.name);
}问题来了,当给frm的DialogResult赋值为DialogResult.OK后,frm自动关闭,但是既然还可以访问到这个frm,这是什么原因?我开始以为是因为这个窗口并没有关闭,只是隐藏起来了,可是当我通过close或者dispose来关闭这个frm时(这时只要把if判断语句改成frm.ShowDialog() == DialogResult.Cancel)就行了),仍然可以访问到这个frm,这是什么原因?
你这句话已经声明了frm这个对象了,后面的什么事件方法多是操作frm里面的内容的只要你没把frm赋值为null,就一定能访问的啊!
就算frm还是指向这个对象的地址,这个对象已经不存在了,怎么还能访问呢?
怎么可能始终存在,都已经被dispose掉了嘛!
不要被表象迷惑
还有一层,就是.NET中的类,如Form类,Form类的一个对象并不等同于一个窗口,它的作用是来管理一个窗口的,可以理解为"窗口管理类",虽然窗口关了,但这个管理窗口的类还存在,它里面所有自定义的数据成员还存在,只有当frm = null;之后,.net才会释放该对象.
(当然,如果只把frm=null而没有Close(),则窗口不对关闭,还能看得到).
窗口资源释放后,就不能访问了,这时对象就不存在了
1、当通过ShowDialog方法来显示一个模态窗体时:调用该窗体的Close方法后,只是隐藏了该窗体,任然可以访问该窗体,并可以取得该窗体上控件的值,而且还可以通过ShowDialog方法重新显示该窗体。当调用该窗体的Dispose方法时,等于释放了该窗体所占有的资源,但该对象任然存在,可以访问该窗体,也可以取得窗体上控件的值,但是不能再通过ShowDialog方法重新显示该窗体。
2、当通过Show方法来显示一个非模态窗体时,情况就简单许多,因为Close方法的Dispose方法是一样的,他们都调用了带一个参数的Dispose方法。