Windows窗体和子窗体例程

本文关键字:窗体 例程 Windows | 更新日期: 2023-09-27 18:13:54

我有一个windows窗体方法被调用:

// 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()将再次执行。基本上我想让用户承认他们当前的输入会导致错误,在子表单中显示,允许他们取消重新输入。然后我想重新执行它,并关闭表单,如果没有错误。

现在,我把Cancel输入的一切都搞定了。当用户点击取消,我返回到我的主要形式,但点击OK对它,不重新执行renumberViewports()命令。

任何帮助将不胜感激。

Windows窗体和子窗体例程

如果我明白你想做什么,在你的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();
}