当前位置:编程学习 > C#/ASP.NET >>

使用ShowDialog之后,Owner子窗体的FormClosed事件不响应

如题,我的意思是下面这样
Form1 form1 = new Form1();
Application.Run(form1);

Form1.class里
Form2 form2 = new Form2();
form2.ShowDialog();


Form2.Class里
Form3 form3 = new Form3();
form2.Owner = this;

当关闭Form2的时候,Form3的FormClosed事件不被响应。

如果
Form1.class里
Form2 form2 = new Form2();
form2.Show();
      ~~~~~~~~
的话,
关闭Form2的时候,Form3的FormClosed事件被响应。

有人知道是什么原因么?
--------------------编程问答-------------------- 具体是怎样写的 --------------------编程问答-------------------- 看看事件添加的位置是否正确,是不是在ShowDialog之后添加的 --------------------编程问答-------------------- Form2.Class里
Form3 form3 = new Form3();
form2.Owner = this;

2or 3? --------------------编程问答-------------------- ShowDialog 是阻塞的, Show 是非阻塞的

ShowDialog 时 后面的代码不会执行 直至 ShowDialog 有结果返回

而   Show  则会继续执行后面的代码 --------------------编程问答-------------------- 程序很简单,我就想把aaaaaa弹出来。

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.Owner = this;
            f2.ShowDialog();
        }
    }

public partial class Form2 : Form
    {

        Form3 f3 = new Form3();
        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            f3.Owner = this;
            f3.ShowDialog();
        }
    }

public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }
        private void Form3_FormClosed(object sender, FormClosedEventArgs e)
        {
            MessageBox.Show("aaaaa");
        }
    } --------------------编程问答-------------------- 对不起,是下面这个,我就想在关闭form2的时候,把form3的aaaaaa弹出来。

public partial class Form1 : Form
  {
  public Form1()
  {
  InitializeComponent();
  }

  private void Form1_Load(object sender, EventArgs e)
  {
  Form2 f2 = new Form2();
  f2.Owner = this;
  f2.ShowDialog();
  }
  }

public partial class Form2 : Form
  {

  Form3 f3 = new Form3();
  public Form2()
  {
  InitializeComponent();
  }

  private void Form2_Load(object sender, EventArgs e)
  {
  f3.Owner = this;
  }
  }

public partial class Form3 : Form
  {
  public Form3()
  {
  InitializeComponent();
  }
  private void Form3_FormClosed(object sender, FormClosedEventArgs e)
  {
  MessageBox.Show("aaaaa");
  }
  } --------------------编程问答-------------------- 支持4楼见解! --------------------编程问答--------------------
引用 6 楼 yzlyboy 的回复:
对不起,是下面这个,我就想在关闭form2的时候,把form3的aaaaaa弹出来。

public partial class Form1 : Form
  {
  public Form1()
  {
  InitializeComponent();
  }

  private void Form1_Load(object sender, EventArgs e)
  ……

你这个代码 form3都没有显示,怎么会触发关闭的事件

虽然反射可以实现,但你还是先想清楚要做什么 --------------------编程问答--------------------
引用 4 楼 sandy945 的回复:
ShowDialog 是阻塞的, Show 是非阻塞的

ShowDialog 时 后面的代码不会执行 直至 ShowDialog 有结果返回

而 Show 则会继续执行后面的代码
++++ --------------------编程问答-------------------- 如果
Form1.class里
Form2 form2 = new Form2();
form2.Show();
  ~~~~~~~~
的话,
关闭Form2的时候,Form3的FormClosed事件被响应。
而form2.ShowDialog();
关闭Form2的时候,Form3的FormClosed事件不被响应。 --------------------编程问答--------------------

放在Closing事件中比较好点。
 private void Form3_FormClosing(object sender, FormClosingEventArgs e)
  {
  MessageBox.Show("aaaaa");
  }
  }
--------------------编程问答-------------------- 应该用FormClosing事件 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 再顶顶,没有人仔细看么。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,