当前,我具有以下结构:Form1
接收输入。记录输入后,您可以单击一个按钮以继续基于Form2
的输入动态创建的Form1
。 Form2
收集将在Form3
上使用的更多输入。在每种格式(即Form1
,Form2
,Form3
)中,如果需要更改输入内容,都可以返回上一个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')
来模仿一系列连续形式并不是真正的“直观”。
答案 0 :(得分:1)
处理问题的简便方法是将FormClosing中的cancel属性设置为true,如下所示:
(defpackage #:chapter-25
(:use (#:cl #:chapter-24)))
但是请记住,您应该设置某种条件来关闭它,否则它将永远不会被关闭。