假设有三个窗体,Form1,Form2,Form3。
Form1为主窗体,是启动项,Form2通过Form1上的按钮打开,打开Form2后Form1仍然显示,不设为隐藏。
然后在通过Form2上的按钮打开Form3窗体,让Form3显示同时让Form1和Form2隐藏,我使用如下代码:
(主要逻辑代码)
-----------------------
Form2上的按钮点击事件->
Form1 f1 = new Form1();
Form3 f3 = new Form3();
f3.Show();
f1.Hide();
this.Hide();
------------------------
以上代码目的是显示Form3同时隐藏Form1和Form2,可是实际运行时程序只隐藏了Form2(Form3的上一级窗体)而没有隐藏Form1(Form3的上两级窗体)。
请问,有什么方法可以让Form1隐藏?
谢谢。

解决方案 »

  1.   

    这个不难,你定义窗体实例时,把form1传过去就是了
      

  2.   

    我觉得没这么复杂
    点第2个窗体时的代码:
    MainForm.Hide();
    Form f3=new Form();
    f3.Show();
    this.Hide();
      

  3.   

    "这个不难,你定义窗体实例时,把form1传过去就是了"
    ----------------------------------------------
    大体上应该如何做?
      

  4.   

    你没有理解对象的概念,Form1是启动窗体,那么在form1中你New了Form2,也就是你实例化了一个Form2对象,而在Form2的按钮点击事件里 ,你又 实例化了一个 Form1,这个对象和之前启动的那个对象不是一个对象,这样怎么能有效果呢。你可以利用传参来关闭 Form1,就是 把 Form1的对象作为Form2的构造函数的一个参数传入进来 ,然后隐藏传入的 Form1,或者也可以利用委托。
      

  5.   

    在Form2中定义Form1的属性,从form1打开form2时把form1传过去,同理,然后从form2打开form3时,再把form2的这个form1属性传过去,这样在form3中操作form1和form2就比较容易了吧
      

  6.   

    使用的单例模式,将Form2设成只能存在一个实例,在打开Form1时调用,在打开Form3时隐藏Form2
      

  7.   

    你没有理解对象的概念,Form1是启动窗体,那么在form1中你New了Form2,也就是你实例化了一个Form2对象,而在Form2的按钮点击事件里   ,你又   实例化了一个   Form1,这个对象和之前启动的那个对象不是一个对象,这样怎么能有效果呢。你可以利用传参来关闭   Form1,就是   把   Form1的对象作为Form2的构造函数的一个参数传入进来   ,然后隐藏传入的   Form1,或者也可以利用委托。
    ---------------------------------------------------------------------------------
    正解
      

  8.   

    在Form1中定义一个委托,然后在实例化form2的时候将委托订阅过去就行了
      

  9.   

    Form2上的按钮点击事件-> 
    Form1   f1   =   new   Form1(); 
    Form3   f3   =   new   Form3(); 
    f3.Show(); 
    f1.Hide(); 
    this.Hide();
    上面的代码重新创建了一个f1,原来的没有隐藏掉,你可以在Form1中定义一个静态变量,然后FORM1.f.Hide()就可以了
    欢迎大家访问www.chinadacs.cn最全的.net开发资料