窗体窗体和子窗体例程

时间:2015-09-22 17:39:50

标签: c# winforms

我有一个被调用的窗体表单方法:

// fire up the form 
ViewportRenumberingForm form = new ViewportRenumberingForm(pickedRef, doc);
form.ShowDialog();

然后在该表单中我有一个运行的例程:

private void btnOK_Click(object sender, EventArgs e)
    {
        renumberViewports();
    }

现在如果在renumberViewports()执行期间遇到某种情况,我会要求它启动一个子表单以获取用户如何继续的输入:

if (openAdditionalForm)
{
    ViewportRenumberingForm2 subForm = new ViewportRenumberingForm2();
    var result = subForm.ShowDialog();
    if (result == DialogResult.OK)
    {
        // get all values preserved after close
        bool selected = subForm.ReturnSelected;
        bool unselected = subForm.ReturnUnselected;

        if (selected)
        {
            //do something
        }
        if (unselected)
        {
            //do something
        }
    }
    else if (result == DialogResult.Cancel)
    {
        this.Show();
    }
}

现在,问题是:当用户点击取消时我想返回我的主表单并基本上重新开始。这意味着用户可以重新输入任何信息并点击btnOK_Click()renumberViewports()将再次执行。基本上我希望用户能够确认他们当前的输入会导致错误,以子表格形式显示它们,允许他们取消以重新输入输入。 然后,如果没有错误,我想重新执行它并关闭表单。

现在,我已经完成了取消输入工作的所有工作。当用户点击取消时,我返回到我的主表单,但是点击OK,不会重新执行renumberViewports()命令。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果我了解您要执行的操作,请在renumberViewports()方法中将DialogResult.Cancel条件块更改为:

else if (result == DialogResult.Cancel)
{
    // this will close this form and set the result to 'Cancel'
    this.DialogResult = DialogResult.Cancel;
}

然后,在你的主要形式,而不是简单:

ViewportRenumberingForm form = new ViewportRenumberingForm(pickedRef, doc);
form.ShowDialog();

...我会将其更改为一个不断重新打开ViewportRenumberingForm表单的循环,直到结果不是Cancel

DialogResult result = DialogResult.Cancel;
while (result == DialogResult.Cancel)
{
    ViewportRenumberingForm form = new ViewportRenumberingForm(pickedRef, doc);
    result = form.ShowDialog();
}