【问题标题】:C# Windows Form disappears suddenlyC# Windows 窗体突然消失
【发布时间】:2009-07-19 18:29:16
【问题描述】:

我正在使用 C# + VSTS2008 + .Net 2.0 开发 Windows 窗体应用程序。在 Form1 的 button1 事件处理程序中,我创建了 Form2,然后出现了 Form2。那么当触发Form2的button2的事件处理函数时(button2是Form2的UI按钮元素),执行完button2事件处理函数后,Form2就会消失。这是我创建 Form2 的代码的一部分。有什么想法导致 Form2 消失吗?

// button1 belongs to Form1
private void button1_Click(object sender, EventArgs e)
{
    Form2 form2 = new Form2("www.google.com");
    form2.ShowDialog();
}

【问题讨论】:

  • 你能显示处理 Button2_Click 的代码吗?
  • 发布您的 button2 事件处理程序
  • button2 的事件处理函数为空。有什么想法有什么问题吗?
  • @George2 我的回答可能是对话框被关闭的原因:stackoverflow.com/questions/1150516/…
  • 谢谢科林,我喜欢你的回答。

标签: c# .net winforms visual-studio-2008


【解决方案1】:

Form2 作为对话框打开。被按下的按钮是否也可以定义为CancelButton(CancelButton 属性将在 form2 上)。这样做会在事件处理程序完成后自动关闭对话框。

【讨论】:

  • 作为一个有趣的旁注,设置 AcceptButton 将不会自动关闭表单。这似乎无关紧要,但我想是合乎逻辑的;如果我们取消,我们通常只想离开,而接受可能会在我们离开之前包含一些工作,并可能导致我们希望对话框保留(例如,如果某些验证失败)。
【解决方案2】:

如果没有更多细节就无法确定,但如果Form2 中的button2 具有分配给DialogResult 属性的值,这将导致单击按钮时表单自动隐藏。在设计器中打开 Form2,选择按钮并检查属性网格。如果 DialogResult 属性不是“None”,这是预期行为。

来自 Button.DialogResult 属性的 MSDN 文档:

如果此属性的 DialogResult 设置为None 以外的任何值, 并且如果显示了父表单 通过ShowDialog 方法, 单击按钮关闭父级 无需连接即可形成 任何事件。表格的DialogResult 属性然后设置为 DialogResult的按钮当 按钮被点击。

【讨论】:

  • 再次阅读我的答案;这不是关于事件处理程序,而是关于 button2 的 DialogResult 属性。但是如果事件处理程序是空的,它会加强我对导致行为的 DialogResult 属性的怀疑。
  • 是的,正如 Colin 下面建议的那样,这也可能导致表单消失。您应该将其标记为已接受的答案;o)
  • @George2 在表单上设置 CancelButton 属性将导致在按下关联按钮时表单消失。
  • @Colin:哈哈,有了你的评论,我差点成为千里眼:o)
  • @Fredrik Mörk:很好地理解了设置 DialogResult 的可能性。刚试了一下,它就关闭了对话框。从来不知道。我总是设置它然后自己关闭对话框。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-25
  • 1970-01-01
  • 2016-10-30
  • 2015-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多