窗体跳转问题(虽然是旧问题,但一直没找到好的解决方案)

时间:2020-12-24 20:26:33
问题简化为:

   按下FORM1中按钮B1,弹出FORM2;
   按下FORM2中返回按钮R1弹出FORM1;

我的代码:
FORM1中B1响应函数
{
  FORM2 F2 = new FORM2();
  F2.show();
  this.hide();
}

FORM2中返回按钮R1函数
{
  FORM1 F1 = new FORM1();
  F1.show();
  this.close();// 这个地方可以用close() or dispose(),但为什么FORM1中同样的位置只能用hide??
                若是FORM1用close,整个程序就关闭了,为什么啊??
}
代码有几个问题:
   1. FORM1中弹出FORM2后就完成了它的任务,没有及时释放资源===这个怎么办?
   2. FORM2中每次返回都要新建一个FORM1对象,虽然后面有close函数,但界面很多时,是不是太浪费资源了??
   
这种跳转,比较规范的是用哪种方式?????==============》》》这个问题最重要,希望高手给出专业代码!!!!!!

希望各位高手能给点指导,或是贴出专业点的程序。。。

5 个解决方案

#1


问题一:
Form1是你程序的主窗体,主窗体调用Close,则整个程序关闭.
问题二:
创建Form2时
FORM2 F2 = new FORM2();
F2.show(this); //this为Form1
关闭Form2时
this.Close()
this.Parent.Show(); //Parent其实就是Form1

#2


引用 1 楼 bloodish 的回复:
问题一:
Form1是你程序的主窗体,主窗体调用Close,则整个程序关闭.
问题二:
创建Form2时
FORM2 F2 = new FORM2();
F2.show(this); //this为Form1
关闭Form2时
this.Close()
this.Parent.Show(); //Parent其实就是Form1


this.Parent.Show(); ====》这句执行有问题,报错:未将对象引用设置到对象实例。。你的想法我觉得对,但是该怎么改这个错误??

继续等待...

#3


写错了,不好意思
应该是:
if(this.Owner != null)
  this.Owner.Show();

#4


该回复于2010-08-08 17:46:18被版主删除

#5


引用 2 楼 main_tank 的回复:
引用 1 楼 bloodish 的回复:
问题一:
Form1是你程序的主窗体,主窗体调用Close,则整个程序关闭.
问题二:
创建Form2时
FORM2 F2 = new FORM2();
F2.show(this); //this为Form1
关闭Form2时
this.Close()
this.Parent.Show(); //Parent其实就是Form1


……

this.Close()之后,已经开始销毁.所以.以后的操作都可能失败...
有个解决方法是,把在Form1里面把Form2实例化,然后把Form1.Handle传递给form2.然后把form1隐藏.
在form2里面,需要显示form1的时候,可以通过Form.FromHandle(nextFrm)把form1获得.然后,调用show()
在form1和form2的关闭事件里面判断,销毁另外一个form.

#1


问题一:
Form1是你程序的主窗体,主窗体调用Close,则整个程序关闭.
问题二:
创建Form2时
FORM2 F2 = new FORM2();
F2.show(this); //this为Form1
关闭Form2时
this.Close()
this.Parent.Show(); //Parent其实就是Form1

#2


引用 1 楼 bloodish 的回复:
问题一:
Form1是你程序的主窗体,主窗体调用Close,则整个程序关闭.
问题二:
创建Form2时
FORM2 F2 = new FORM2();
F2.show(this); //this为Form1
关闭Form2时
this.Close()
this.Parent.Show(); //Parent其实就是Form1


this.Parent.Show(); ====》这句执行有问题,报错:未将对象引用设置到对象实例。。你的想法我觉得对,但是该怎么改这个错误??

继续等待...

#3


写错了,不好意思
应该是:
if(this.Owner != null)
  this.Owner.Show();

#4


该回复于2010-08-08 17:46:18被版主删除

#5


引用 2 楼 main_tank 的回复:
引用 1 楼 bloodish 的回复:
问题一:
Form1是你程序的主窗体,主窗体调用Close,则整个程序关闭.
问题二:
创建Form2时
FORM2 F2 = new FORM2();
F2.show(this); //this为Form1
关闭Form2时
this.Close()
this.Parent.Show(); //Parent其实就是Form1


……

this.Close()之后,已经开始销毁.所以.以后的操作都可能失败...
有个解决方法是,把在Form1里面把Form2实例化,然后把Form1.Handle传递给form2.然后把form1隐藏.
在form2里面,需要显示form1的时候,可以通过Form.FromHandle(nextFrm)把form1获得.然后,调用show()
在form1和form2的关闭事件里面判断,销毁另外一个form.