我有两个表格。第一种形式是mainForm,它永远不会去任何地方。打开第二个表单(saveForm)时,它将显示在顶部。当我关闭这个表单时,我希望运行mainForm中的某段代码。我想这是让这件事发生的正确方式吧?
当我关闭并返回mainForm时,saveForm上的代码:
private void btnSaveDetails_Click(object sender, EventArgs e)
{
Delivery d = new Delivery(txtNameBox.Text, txtAddressBox.Text, txtDayBox.Text, txtTimeBox.Text, txtMealBox.Text, txtInstructionsBox.Text, txtStatusBox.Text);
mainForm.myDeliveries.Add(d);
this.Close();
}有什么想法吗?
发布于 2010-04-20 04:36:08
您必须设置对话框窗体的DialogResult属性。通过显式地在代码中或通过将对话框结果赋值给窗体上的按钮来实现。
private void btnSaveDetails_Click(object sender, EventArgs e)
{
Delivery d = new Delivery(
txtNameBox.Text, txtAddressBox.Text, txtDayBox.Text,
txtTimeBox.Text, txtMealBox.Text, txtInstructionsBox.Text,
txtStatusBox.Text
);
mainForm.myDeliveries.Add(d);
this.DialogResult = DialogResults.OK;
}如果您使用ShowDialog()调用对话框,则无需调用Close()设置this.DialogResult会为您执行此操作。
在调用表单时,您必须执行以下操作:
var frm = new MyForm();
if (frm.ShowDialog() == DialogResults.OK) {
// do what you want to do on success.
}发布于 2010-04-20 04:35:20
您可以使用返回的DialogResult在应用程序中进行一些更改。例如,如果您向用户提供了一个对话框,询问他们是否要删除所有文件,而他们的回答是单击对话框上的Yes按钮,那么您将删除这些文件。
有关如何使用DialogResult和ShowDialog的更多信息可在此处找到:DialogResult
更新:如果您发布的代码来自您的“子”表单,那么到目前为止您所做的可能还不错,但是,您仍然需要在该表单上提供一个DialogResult ,以便向mainForm传达已经完成了某些操作。例如,可以在this.Close()之前执行以下操作:
this.DialogResult = DialogResult.OK;然后,在调用childForm.ShowDialog()之后的代码中,检查DialogResult。如果它等于DialogResult.OK,那么您可以执行任何您需要执行的任务,这表明用户单击了OK。
(另外,在使用ShowDialog()时不会调用Dispose();如有必要,您需要自己清理。)
https://stackoverflow.com/questions/2670646
复制相似问题