每次单击按钮时创建一个新表单

时间:2013-08-20 10:11:03

标签: c# winforms

我很纳闷。 Microsoft Word,Excel等应用程序如何在其中创建一个包含空白的新表单,就像我们创建另一个新表单一样。

我尝试了代码:

this.Hide();

Form2 secondaryForm = new Form2(); 
secondaryForm.ShowDialog();

this.Close();

上面的代码是创建一个新的空白表单(新表单),但这只是有限的时间。我想知道的是,应用程序如何在如此无限的时间内制作出一千个新的空白表格(新表格)?

注意:我的意思是无限时间:我们可以创建一个新表单,无论我们多少次单击“新建”按钮

提前致谢!

4 个答案:

答案 0 :(得分:2)

我上面的答案很好,但我想扩展它们。

您的代码无效的原因是因为您要关闭主表单

主窗体是程序启动时运行的窗体。如果您创建一个简单的winform并查看main函数,您会看到类似

的内容
     Application.EnableVisualStyles();
     Application.SetCompatibleTextRenderingDefault(false);
     Application.Run(new Form1());

当您关闭Form1时,您将返回此处并继续运行,完成主要功能并结束程序。

除了其他人建议之外,你可以做的是创建一个不可见的主表单,并在创建主表单后立即创建另一个表单。通过这种方式,您可以根据需要关闭和打开表单,但不会关闭该程序。

至于你问过什么,能够打开几种形式。你可以做的只是做:

Form frm = new Form();// Creating a form
frm.Show();// displaying the form

ShowDialog方法执行show所做的操作,但也会冻结打开它的表单。所以你可能不想要它

答案 1 :(得分:0)

以下代码将允许您在不关闭主表单的情况下打开任意数量的表单。

//this.Hide();

Form2 secondaryForm = new Form2(); 
secondaryForm.Show();

//this.Close();

答案 2 :(得分:0)

很简单,他们只是创建所需表单类的新实例并调用其Show method

MyForm frm = new MyForm();
frm.Show();

您当前正在使用ShowDialog方法,该方法会创建模态对话框,即。阻止用户与应用程序其余部分交互的用户,直到用户解除它为止。那不是你想要的。

除非您确实要关闭原始表单,否则您也无需调用HideClose方法。 Office应用程序不执行此操作 - “新建”只会打开一个新窗口,保留当前的窗口。

如果想要在打开新表单时关闭原始表单,请按以下步骤操作:

// Create and display new form
MyForm frm = new MyForm();
frm.Show();

// Close this form
this.Close();

答案 3 :(得分:0)

我想您在点击按钮后需要produce表单,表单应该生成并显示,不管表单数量的限制。您可以使用Timer来实现此目的:

//Place this code in your main form constructor
Timer t = new Timer {Interval = 100};    
t.Tick += (s,e) => {
   new Form2().ShowDialog();
};
button1.Click += (s,e) => {
   t.Start();
};
//NOTE: you have to use the stop button of the IDE to stop this,
//it will run continuously producing new forms and showing them 
//without allowing you to touch the Close button of your main form.

你应该限制表单的数量,因为我们不能生成尽可能多的表单,我已经测试过StackOverflowException抛出了System.dll,打开了272个表单:))) 。尝试添加count变量并在达到数字时停止计时器,例如272)