【问题标题】:Form.Load Event not raised when using Form.Show, but raised when using Form.ShowDialogForm.Load 事件在使用 Form.Show 时未引发,但在使用 Form.ShowDialog 时引发
【发布时间】:2017-01-24 16:58:41
【问题描述】:

当我通过Form.Show() 打开一个表单时,打开的表单的Show Event 不会被提升。

但是当我使用Form.ShowDialog() 时,会引发事件并且在我的Form_Shown 方法中命中我的断点。

我看到this answer,异常隐藏了事件,但我没有发现异常。

那么,为什么当我调用ShowDialog() 时会引发事件,但如果我调用Show() 则不会?

这里是link to a demo。当我单击 ShowDialog() 按钮时,我看到带有加载和显示事件的消息框,但对于 Show(),我只看到加载事件。

【问题讨论】:

  • 你必须向我们展示代码——你知道的。
  • @LarsTech 什么代码?那两条线?添加事件处理程序并调用 Show()?这没有任何意义,并导致关闭为题外话“为什么我的代码不起作用”
  • 因为还有其他事情发生。发布将重复该问题的代码。
  • 无法重现。我使用Show()ShowDialog() 得到Load()Shown() 事件。要么你错误地连接了这些事件,要么有其他东西阻止了这些事件的发生。您在表单上有任何第三方控件吗?
  • @Idle_Mind 我一直都在看。发布您的小演示,我在链接中发布了我的。

标签: .net winforms .net-4.5.2


【解决方案1】:
using (var form = new Form2())
{
  form.Show();
}

Using 块将立即处理您的表单,因为 Show 不会阻​​止代码。 ShowDialog 将阻止代码,直到表单关闭,因此,该版本有效。

【讨论】:

  • 我也试过不“使用”,但还是不行。
  • @magicandre1981 再次,在您的问题中发布该代码(而不是另一个演示项目)。当我删除 using 块时,我会收到加载和显示的消息,并且会出现表单
  • 好的,我调用 Dispose 太快了,和使用一样。我需要将显示事件的发送数据发送到 form1,并在收到来自 form2 的反馈后处理表单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-07
  • 2016-02-05
  • 1970-01-01
  • 2014-07-28
  • 2012-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多