public DialogResult ShowDialog()帮助!

时间:2010-04-19 20:33:17

标签: c#

我有两种形式。 第一种形式是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();
    }

有什么想法吗?

2 个答案:

答案 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.
}