我写了一个winform程序,在主窗体Form1中的load中有一个判断,为true时没有任何操作正常显示主窗体,为false时就隐藏主窗体而显示另一个子窗体Form2,但是无论怎么做主窗体都不能隐藏,实在是不解,我的测试代码如下:bool bl =false;if(bl)
{}else
{
  base.Hide();//这种方法没效果
  base.Visible = false;//这种也没有效果   两个同时用也不能隐藏
   Form2 form = new Form2 ();
   form.Show();
}

解决方案 »

  1.   

    你Form1是模式窗口,所以form2也必须模式窗口才能隐藏Form1
    bool bl =false;if(bl)
    {}else
    {
      base.Hide();//这种方法没效果
      base.Visible = false;//这种也没有效果 两个同时用也不能隐藏
      Form2 form = new Form2 ();
      form.ShowDialog();  
    }
      

  2.   


                Form2 f2 = new Form2();
                f2.Show();            this.Hide();
      

  3.   

    1楼2楼的都试了一下不行,更奇怪的是一楼的方法后他竟弹出了一个对话框:已经显示窗体不能显示未模式对话框。在调用showDialog之前应将窗体的Visible属性设置为false。 更加纳闷了 明明已经设置为false了
      

  4.   

    试一下这个吧,这样的问题我也遇到过!
    this.Opacity=0.0;//窗口不可见
    form form1=new form();
    form1.show();//这种方式下用户只能对新打开窗口操作,
    form1.showDialog();//这种方式下用户可以同时对打开的,和隐藏窗口操作。
    在这里建议用第一种方式!
      

  5.   

    在主窗体Form1中的load中有一个判断,为true时没有任何操作正常显示主窗体,为false时就隐藏主窗体而显示另一个子窗体Form2,你应该把这个判断放在program.cs中:
      

  6.   

    这样在逻辑上应该是做不到的。如果Form1是Form2的Parent,则没有办法让Parent隐藏而让Child显示。倒是让Child隐藏,Parent显示可以。因此你的需求,应该修改为:新增一个启动对象,不要是Form,一个函数就可以了,让Form1和Form2都属于启动对象,然后在程序里面做处理要显示哪个。你原来的代码已经可以使用了,不用再改。
      

  7.   

    就是新建一个class1,然后把Form1下的[STAThread]和下面的main函数搬到class1底下,然后把启动对象设置为class1。Form1和Form2都在class1下面建立。然后你喜欢show哪个都可以了
      

  8.   

    如果你的Form1是启动窗体,即由Application.Run(new Form1())来显示的,
    无论form1.Hide()还是Visible=false都不会有任何作用,启动窗体必须显示。