我是一个由VB转向C#.NET的开发者,现在有这样一个问题,就是假设有窗口A和窗口B两个窗口,当前已经打开了窗口A,我需要关闭窗口A然后打开窗口B,这在以前VB中是非常简单的一个操作,我想在C#中应该也不是什么难事,可是我实在想不出应该怎么实现,因为C#中如果想打开一个窗口,必须新建该窗口的对象,而我在A中建立B的对象,然后打开B,关闭A的时候,它的子对象B必然也会关闭,苦恼啊!希望专家们帮帮忙……

解决方案 »

  1.   

    在a的unloade事件中写Response.Write("<script language='javascript'>window.open(b.aspx)</script>");应该可以吧,你试试
      

  2.   

    在打开窗口B时不要关闭窗口A,而是将窗口A隐藏掉A.Hide();
    Form B = new Form();
    B.Show();并且要在窗口B的FormB_Close事件中添加如下代码把应用程序的进程关闭:Application.Exit();
      

  3.   

    更正: 上述应该是FormB_Closing事件中添加Application.Exit()代码
      

  4.   

    “它的子对象B必然也会关闭”你这句话已经说到关键点上了,
    所以,只要不让B作为A的子对象就可以了。定义一个全局的类MyApplictionpublic class MyAppliction
    {
      public Form1 A;
      public Form2 B;
    }然后在main里这样做MyAppliction.A = new Form1();
    Appliction.Run(MyAppliction.A);在A中想打开B的时候就MyAppliction.B = new Form2();
    MyAppliction.B.Show();
      

  5.   

    你说的应该是有A 窗体中创建B 窗体,
    如果要关闭,释放A窗体,那么作为局部变量的B窗体自然也就关闭了
    最好的办法就是将B窗体设置为全局变量,不和A相关
    VB中也就是这样做的,在程序初始化时就创建了几个全局的窗体,就
    可以很自然顺便的访问了,在C# 中也要设置为全局变量才好实现的~~
      

  6.   

    这个很好解决:
    1、将启动代码写在一个新建类(如 Common.cs)中。
    2、在启动方法中写入下代码:
    [STAThread]
    static void Main(string[] commands)
    {
        new FormA().Show();
        Application.Run();    
    }
    3、在FormA的 Closing 事件中 加入代码
    new FormB().Show();
    4、提醒: 一定要在最后一个窗口的 Closed 事件中加入
    Application.Exit() // 否则程序将不会被关闭 消息循环将一直被继续