将值传递给另一个表单的StackoverflowException c#

时间:2013-12-02 11:26:50

标签: c# stack-overflow

据我所知,这下面的代码会溢出,因为它被称为第二次。 这是解释, 假设我有form1,form2,form3

并在form1

Form NewForm2 = new Form2;

并且在form3中

Form NewForm3 = new Form2;

当我显示form2当然它的堆栈溢出因为它在Form1和Form3上第二次被调用, 好的,所以我的问题是有一种方法可以从多种形式连接Form2吗?有没有参考?

2 个答案:

答案 0 :(得分:2)

所以我的问题是有没有办法从多个表单连接Form2? 是的,只需在表单上应用Singleton Pattern

public partial class Form2 : Form
{

 private static Form2 inst;
 public static Form2  GetForm
 {
   get
    {
     if (inst == null || inst.IsDisposed)
         inst = new Form2();
     return inst;
     }
 }

}

显示表单

  Form2.GetForm.Show();

答案 1 :(得分:1)

您可以使用此代码查看是否已创建Form2,如果已创建,则显示它,然后创建Form2的新实例。

var form = Application.OpenForms.OfType<Form2>().FirstOrDefault();

if (form == null)
{
    form = new Form2();
}

form.Show();

但是打开2个表单不应该导致SO异常,我认为其他地方有问题,但您可以尝试上面的代码并查看它是否解决了您的问题。