Say*_*yse 27 c# dialogresult winforms
在回答我最近的一个问题(这里)时,汉斯帕斯特说我应该设置DialogResult
关闭我的表格而不是form.Close()
我似乎无法找出原因?
如果我已经正确阅读,MSDN文档说明这样做只会隐藏表单而不是正确处理它我认为.Close()
这样做?
从文档中提取.
当用户单击对话框的"关闭"按钮或设置DialogResult属性的值时,不会自动调用Close方法.相反,表单是隐藏的,可以再次显示,而无需创建对话框的新实例.由于此行为,您必须在应用程序不再需要表单时调用表单的Dispose方法.
另一方面,Microsoft创建了一个支持页面,其中说明了如何使用DialogResult属性,并在其"验证它工作"部分中声明单击这样将关闭表单.
所以我的问题是双重的,我应该继续使用Close或DialogResult; 并且对话框结果关闭或隐藏表单.从我下面的代码(一个带有两个按钮的简单表单),看起来它确实只是作为一个断点点this.Close()
被隐藏...(this.Close()
注释,表单仍然消失,只是不确定是否隐藏)
public Form1()
{
InitializeComponent();
button1.Click += (s, e) =>
{
//I edited my question to include using
using(Form1 form = new Form1())
{
form.ShowDialog();
}
};
button2.Click += (s, e) =>
{
this.DialogResult = DialogResult.OK;
this.Close();
};
}
Run Code Online (Sandbox Code Playgroud)
Ste*_*eve 20
当您使用ShowDialog打开模式对话框时,调用代码将被阻止,直到表单调用关闭或隐藏.如果您想要读取被调用表单的一些公共属性并希望根据单击"确定"或"取消"按钮执行操作(例如将数据保存到数据库或文件),则需要知道用户是否需要是否采取行动.ShowDialog()方法返回的DialogResult允许您采取适当的操作......
所以举个例子
using (Form1 form = new Form1())
{
DialogResult dr = form.ShowDialog();
if(dr == DialogResult.OK)
{
string custName = form.CustomerName;
SaveToFile(custName);
}
}
Run Code Online (Sandbox Code Playgroud)
您是否调用Close
或设置DialogResult
属性并不是真正的问题。您只需要确保调用Dispose
. 我更喜欢使用 using 块执行此操作:
using (Form1 form = new Form1())
{
form.ShowDialog();
}
Run Code Online (Sandbox Code Playgroud)
我最初认为你可以调用ShowDialog
一个Form
已经调用了它的Close
方法。不是这种情况。如果您使用 以模态方式显示表单ShowDialog
,则它是否因Close
方法或设置DialogResult
属性而关闭似乎无关紧要。似乎设置DialogResult
只是关闭Form
.
但是,无论是调用Close
还是设置DialogResult
属性,关键是要确保调用Dispose()
或将表单放在 using 块中。