如题,想知道原理是什么样的,具体代码怎么写,,现在用show的方式打开新窗体,如何关闭父窗体,新窗体也跟着关闭了,在线等

解决方案 »

  1.   

    Parentformname.hide()
    Childformname.show()
      

  2.   

    话说用这种方法就可以了。代码如下:private void Form1_Load(object sender, EventArgs e)
            {
                Thread thread = new Thread(showform);
                thread.IsBackground = false;
                thread.Start();
            }
            void showform()
            {
                Application.Run(new Form2());
            }
      

  3.   

    如果你的父窗体是MDI的话,子窗体一般都是在里面显示的,就不存在关闭父窗体的问题。
    一般窗体之间的就直接关闭,如果是父窗体的话 建议隐藏父窗体打开子窗体,只要子窗体的大小遮住父窗体应该能满足楼主的条件吧?
      

  4.   

    原理么就是说我的子窗体要和父窗体撇清关系。如果我在父窗体里面直接show出子窗体的话我子窗体是基于父窗体当前线程的。那么关闭父窗体的同时会销毁该父窗体线程内的所有资源,当然包括子窗体也会被销毁。所以只能给子窗体重新建立一个线程来运行,这样才能保证父窗体关闭时不能影响子窗体。代码如上我所说即可实现。
      

  5.   

    new Popup().show();
    this.Close();
    注意 this 也就是父窗体 不要是主窗体 否则 整个app进程就会被关闭了。
      

  6.   


    static class Program
    {
    /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main()
    {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    // Application.Run(new Form1());
                    Application.Run()
                    // 但是在最后一个窗体关闭事件中要调用
                    // Application.Exit();
    }
    }
      

  7.   

    如果是wpf应用,就不存在这个问题了,如果是winform应用,最简单的实现方式就是不由用户来控件主窗口的关闭,只隐藏主窗体。
      

  8.   

    thread 是线程定义。你需要引用using System.Threading;。这里代表新建一条非后台线程来运行form2子窗体
      

  9.   


    // 利用 Application.OpenForms 可遍历所有打开的窗口
    foreach (Form f in Application.OpenForms)
        Console.WriteLine(f.Text);
      

  10.   

        MainForm Mf = new MainForm(StrServerIP);
                        Mf.WindowState = FormWindowState.Maximized;
                        Mf.Show();
                     
                        this.Hide();
    一般是隐藏的
      

  11.   


    OK 搞定,谢谢你,方便留下qq么,以后还要请教请教啊
      

  12.   

    不过一般程序实现这种效果比如登录界面和主界面,登录成功后显示主界面这种东西是不用多线程的,但是也不是用隐藏。而是在[STAThread]
            static void Main()
            {}
    里面按顺序进行application.run()实现的。登录主界面后还想以主界面为主窗体打开子窗体并关闭的话一般才是用隐藏主界面来实现。特殊点的想关闭主界面而不是仅仅用障眼法隐藏主界面并不关闭子界面的实现方法就是我说的那种多线程方法。
      

  13.   

    刷的好快啊结束请结贴哈。QQ就不留了。有疑问请在我csdn上留言。我QQ是办公QQ。上班不能挂其他的。
      

  14.   

    可以让主程序先运行 Application.Run(new Form2());
     在Form2 的 Load 事件中 show 父窗体 Form1,
    待Form1上满足一定条件时,直接在Form1 中 this.Close(); 关闭Form1就可以,Form2就自己弹出来了
    若不满足条件时,Application.Exit(); 整个程序就退出了,Form2也不会再弹出了
      

  15.   

      就是打开一个新的窗体,关闭原来的?简单。
      this.Close();就这一句话。   在跳转或者调用那句话的后面加上一句就行了。
      

  16.   

    在父窗体随便那个空间的Click事件里打
    Form newform = new Form();
    newform.show;
    this.close();
      

  17.   

    Form1 from9 = new Form1();
     from9.Show();
     this.Close();
      

  18.   

    修改Program.cs文件。你打开第一个窗体时,不要像以前那样Application.Run(new Form1());修改成Form1 form1 = new Form1();
                    form1 .Show();
                    Application.Run();
    这样子,当你Form1打开一个新窗口时,用this.close();新窗口就不会跟着关闭。
    记得新窗口show()要在这个窗口的close()前面哦。
      

  19.   

    只可以隐藏,不能关闭父窗体,否则App就会关闭,具体方法楼上已经说了。