C# C窗口窗体突然消失

C# C窗口窗体突然消失,c#,.net,winforms,visual-studio-2008,C#,.net,Winforms,Visual Studio 2008,我正在使用C+VSTS2008+.NET2.0开发一个Windows窗体应用程序。在Form1的button1事件处理程序中,我创建Form2,然后出现Form2。然后当Form2 button2的button2的触发事件处理程序是Form2的UI button元素时,执行button2事件处理程序后,Form2将消失。这是我创建Form2的部分代码。你知道是什么原因导致Form2消失了吗 // button1 belongs to Form1 private void button1_Clic

我正在使用C+VSTS2008+.NET2.0开发一个Windows窗体应用程序。在Form1的button1事件处理程序中,我创建Form2,然后出现Form2。然后当Form2 button2的button2的触发事件处理程序是Form2的UI button元素时,执行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();
}

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

从Button.DialogResult属性的MSDN文档中:

如果此属性的DialogResult 设置为除“无”以外的任何值, 如果显示了父窗体 通过ShowDialog方法, 单击该按钮将关闭父级 无需连接即可形成 任何事件。窗体的对话框结果 属性然后设置为 对话框当 按钮被点击


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

能否显示正在处理Button2的代码?单击?发布Button2事件处理程序Button2的事件处理程序为空。有什么问题吗?@George2我的回答可能是对话被取消的原因:谢谢科林,我喜欢你的回答。请再读一遍我的回答;这不是关于事件处理程序,而是关于button2的DialogResult属性。但是如果事件处理程序是空的,那么我就更加怀疑是DialogResult属性导致了这种行为。是的,正如科林在下面所建议的,这也可能导致表单消失。你应该将其标记为已接受的答案;o@George2在窗体上设置CancelButton属性将导致窗体在按下相关按钮时消失。@科林:哈哈,在你的评论中,我几乎成了千里眼:o@FredrikMörk:很好地理解了设置DialogResult的可能性。刚试过,它就取消了对话。我从来不知道。我总是先设置它,然后自己关闭对话框。有趣的是,设置AcceptButton不会自动关闭表单。这似乎不合理,但我想是合乎逻辑的;如果我们取消,我们通常只想离开,而接受可能会在我们离开之前包含一些工作,并且可能导致我们希望在某些验证失败的情况下保留对话框。