Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 每次单击按钮时创建一个新表单_C#_Winforms - Fatal编程技术网

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

C# 每次单击按钮时创建一个新表单,c#,winforms,C#,Winforms,我在想。Microsoft Word、Excel等应用程序如何创建一个内部为空的新表单,就像我们创建另一个新表单一样 我试过密码: this.Hide(); Form2 secondaryForm = new Form2(); secondaryForm.ShowDialog(); this.Close(); 上面的代码是创建一个新的空白表单(newform),但这只是有限的时间。我想知道的是,应用程序如何在如此无限的时间内生成一千个新的空白表单(新表单) 注意:我所说的无限制时间的意思

我在想。Microsoft Word、Excel等应用程序如何创建一个内部为空的新表单,就像我们创建另一个新表单一样

我试过密码:

this.Hide();

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

this.Close();
上面的代码是创建一个新的空白表单(newform),但这只是有限的时间。我想知道的是,应用程序如何在如此无限的时间内生成一千个新的空白表单(新表单)

注意:我所说的无限制时间的意思是:我们可以创建一个新表单,无论单击“新建”按钮多少次,表单都将始终被创建


提前谢谢

以下代码允许您在不关闭主窗体的情况下打开任意数量的窗体

//this.Hide();

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

//this.Close();

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

您当前正在使用
ShowDialog
方法,该方法创建一个模式对话框,即阻止用户与应用程序其余部分的交互,直到用户将其取消。那不是你想要的

您也不需要调用
Hide
Close
方法,除非您确实想要关闭原始表单。Office应用程序不这样做-“新建”只会打开一个新窗口,保持当前窗口不变

如果在打开新表单时确实要关闭原始表单,请按以下方式操作:

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

// Close this form
this.Close();

我想你想
生成
表单一旦我们点击按钮,表单就应该生成并显示,而不管表单数量的限制如何。为此,您可以使用
计时器

//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.

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

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

代码不起作用的原因是您正在关闭主窗体

主窗体是程序启动时运行的窗体。如果您创建一个简单的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
的操作,但也冻结打开它的表单。所以你可能不想要它

你所说的
无限时间
是什么意思?我的意思是,当我单击“按钮”(即创建新表单)时,新表单将始终被创建,无论我们单击“按钮”多少次,都会调用Show,而不是ShowDialog,并且不要关闭父级form@Fuhans使用
secondaryForm.Show()
而不是
ShowDialog()
并且不要关闭主窗体。您可以尝试
而(true)新建窗体2().Show(),应该做你想做的事是的,我没有想到这个设置是默认设置。但是有一个比你提出的更好的解决方案,只是。@CodyGray天哪!非常感谢。太棒了。尽管从未有过这样的想法。哇!我只是想起了所有我可以使用它的时候……它是VB.NET应用程序属性页上的内置选项。我不知道为什么它在C#中隐藏得这么好。谢谢@NoIdeaForName
Form frm = new Form();// Creating a form
frm.Show();// displaying the form