如何一次打开一系列连续的表格?

时间:2019-06-14 16:44:32

标签: c# winforms

当前,我具有以下结构:Form1接收输入。记录输入后,您可以单击一个按钮以继续基于Form2的输入动态创建的Form1Form2收集将在Form3上使用的更多输入。在每种格式(即Form1Form2Form3)中,如果需要更改输入内容,都可以返回上一个Form为此,我将关闭当前的Form 并打开我在代码中手动记录的Owner Form

我当前打开这些多种形式的方法:在转到下一个形式时隐藏当前形式,在回溯到上一个形式时关闭当前形式。我的代码示例:

private void next_Click(object sender, EventArgs e)
{
    List<int> intData = new List<int>();
    //Process intData's members

    this.Hide();
    SecondInputForm form2 = new SecondInputForm(intData);
    form2.Owner = this;
    form2.ShowDialog();
}

next中,Button是我的Form1中的Form2,允许用户继续使用第二种形式Form2。在我的Form3中,我有一个类似的结构来打开FormClosing。但是,我有另一个事件侦听器Form1,当Form2关闭时(即回溯到以前的表单),可以打开我以前的表单private void Form2_FormClosing(object sender, FormClosingEventArgs e) { this.Owner.Show(); } private void next_Click(object sender, EventArgs e) { List<int> intData = new List<int>(); //Process intData's members EquationInput form3 = new EquationInput(intData); form3.Show(); form3.Owner = this; this.Hide(); }

Hide()

现在问题出现在这里。当我Form2 FormClosing时,它注册为Form2事件,并以某种方式关闭Form3,结果关闭了其“子”形式Form1。然后打开Form2

我想要的结果是:它隐藏Form3但不将其关闭,然后继续在Hide()中收集来自用户的输入。

打开多个表单的更好方法是什么?或者,如果Hide()表单确实是最好的方法,我该如何解决当前问题?有人可能会说,我觉得用i = grab.find('.') if i >= 0: grab = grab[:i + 3].lstrip('0') 来模仿一系列连续形式并不是真正的“直观”。

1 个答案:

答案 0 :(得分:1)

处理问题的简便方法是将FormClosing中的cancel属性设置为true,如下所示:

(defpackage #:chapter-25
  (:use (#:cl #:chapter-24)))

但是请记住,您应该设置某种条件来关闭它,否则它将永远不会被关闭。