我有两种形式。 第一种形式是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();
}
有什么想法吗?
答案 0 :(得分:4)
您可以使用返回的DialogResult对您的应用程序进行一些更改。例如,如果您向用户提供了一个对话框,询问他们是否要删除所有文件并通过单击对话框上的“是”按钮进行响应,则会删除这些文件。
有关如何使用DialogResult和ShowDialog vcan的更多信息,请访问:DialogResult
更新:如果您发布的代码来自您的“子”形式,那么您目前所做的可能还不错,但是,您仍然需要在该表单上提供一个DialogResult 与mainForm沟通说完了一些事情。例如,您可以在此之前执行以下操作。关闭():
this.DialogResult = DialogResult.OK;
然后,在之后调用childForm.ShowDialog()之后,检查DialogResult。如果它等于DialogResult.OK,那么你可以执行任何你需要的任务,表明用户点击了OK。
(并且,在旁注中,当您使用ShowDialog()时,Dispose()是不;如果需要,您需要自己清理。)
答案 1 :(得分:1)
您必须设置对话框表单的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;
}
如果您使用Close()
调用对话框,则无需调用ShowDialog()
设置此.DialogResult会为您执行此操作。
在调用表单时,您必须执行以下操作:
var frm = new MyForm();
if (frm.ShowDialog() == DialogResults.OK) {
// do what you want to do on success.
}