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

yzlyboy 2011-12-20 10:23:23
如题,我的意思是下面这样
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事件被响应。

有人知道是什么原因么?
...全文
224 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzlyboy 2012-07-16
  • 打赏
  • 举报
回复
再顶顶,没有人仔细看么。
T3p0 2011-12-23
  • 打赏
  • 举报
回复
应该用FormClosing事件
DENQH 2011-12-22
  • 打赏
  • 举报
回复

放在Closing事件中比较好点。
private void Form3_FormClosing(object sender, FormClosingEventArgs e)
{
MessageBox.Show("aaaaa");
}
}
yzlyboy 2011-12-22
  • 打赏
  • 举报
回复
如果
Form1.class里
Form2 form2 = new Form2();
form2.Show();
~~~~~~~~
的话,
关闭Form2的时候,Form3的FormClosed事件被响应。
而form2.ShowDialog();
关闭Form2的时候,Form3的FormClosed事件不被响应。
烟波钓 2011-12-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sandy945 的回复:]
ShowDialog 是阻塞的, Show 是非阻塞的

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

而 Show 则会继续执行后面的代码
[/Quote]++++
阿非 2011-12-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yzlyboy 的回复:]

对不起,是下面这个,我就想在关闭form2的时候,把form3的aaaaaa弹出来。

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

private void Form1_Load(object sender, EventArgs e)
……
[/Quote]
你这个代码 form3都没有显示,怎么会触发关闭的事件

虽然反射可以实现,但你还是先想清楚要做什么
林g 2011-12-21
  • 打赏
  • 举报
回复
支持4楼见解!
yzlyboy 2011-12-21
  • 打赏
  • 举报
回复
对不起,是下面这个,我就想在关闭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");
}
}
yzlyboy 2011-12-21
  • 打赏
  • 举报
回复
程序很简单,我就想把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");
}
}
阿非 2011-12-20
  • 打赏
  • 举报
回复
ShowDialog 是阻塞的, Show 是非阻塞的

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

而 Show 则会继续执行后面的代码
MKing0412 2011-12-20
  • 打赏
  • 举报
回复
Form2.Class里
Form3 form3 = new Form3();
form2.Owner = this;

2or 3?
阿非 2011-12-20
  • 打赏
  • 举报
回复
看看事件添加的位置是否正确,是不是在ShowDialog之后添加的
阿非 2011-12-20
  • 打赏
  • 举报
回复
具体是怎样写的

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧