FormA中按钮打开FormB,怎样在开发FormB后,关闭FormA?FormB fb = new FormB();
fb.ShowDialog();
this.Close();
但是FormA关闭不了,只有在FormB关闭后,FormA才能关闭。该怎样解决?

解决方案 »

  1.   

    Thread th = new Thread(new ThreadStart(new MethodInvoker(delegate
                    {
                        this.Invoke(new MethodInvoker(delegate { this.Close(); }));
                        Application.Run(new Form2());
                    })));
                th.Start();this.Hide();
    Form2 f= new Form2();
    f.FormClosed += new FormClosedEventHandler(f_FormClosed);
    f.Show();
    void f_FormClosed(object sender, FormClosedEventArgs e)
    {
        this.Close();
    }
      

  2.   

    fb.ShowDialog();
    你那个是模式化打开,只能这个第三个窗体关了才可以关第二个public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }        private void button2_Click(object sender, EventArgs e)
            {
                //打开F3
                Form3 f3 = new Form3(this);
                f3.Show();
            }
        }
       public partial class Form3 : Form
        {
            public Form3(Form f )
            {
                InitializeComponent();
                f.Close();
            }
            
            private void Form3_Load(object sender, EventArgs e)
            {        }
        }
      

  3.   

    FormB fb = new FormB();
    fb.Show();//打开FormB 
    this.Hide();//隐藏当前
      

  4.   


    我试验了一个简单的A和B可以成功。但是使用到项目中,它报个错误:在执行到this.Invoke(new MethodInvoker(delegate { this.Close(); }));的时候
    它说:
    “未处理 ObjectDisposedException”
    无法访问已释放的对象,
    对象名LoginForm
      

  5.   


    这样做可以。但是新打开的fb最小化了,而显示的是FormA之前打开的一些窗体。
    必须在状态栏将fb最大化才能显示。
      

  6.   

    设置一个BOOL变量记录A是否打开,
    A处理完事情后.A.close();
    会再去执行FORMB
    Application.Run(new FormA());
    if A打开 
    {
    Application.Run(new FormB());}