Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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# 在两个windows窗体(其中一个窗体为singleton)之间发送数据_C#_.net_Winforms - Fatal编程技术网

C# 在两个windows窗体(其中一个窗体为singleton)之间发送数据

C# 在两个windows窗体(其中一个窗体为singleton)之间发送数据,c#,.net,winforms,C#,.net,Winforms,我有以下问题,我有两个windows窗体,为了在它们之间发送数据,我发现在Form2(由Form1调用)构造函数中,我将传递对Form1的引用 像这样公共表单2(表单调用表单) { mainForm=调用Form1形式的表单; 初始化组件(); } 但我希望Form2是单例的,不知何故,我不知道如何通过将form1的引用传递给Form2来实现这一点。我查看了文档,不知道如何编辑这个示例以满足我的需要。因此,我可以创建单例构造函数或引用form1的构造函数,但不能同时创建两者。如果form1是应用

我有以下问题,我有两个windows窗体,为了在它们之间发送数据,我发现在Form2(由Form1调用)构造函数中,我将传递对Form1的引用

像这样
公共表单2(表单调用表单)
{
mainForm=调用Form1形式的表单;
初始化组件();
}


但我希望Form2是单例的,不知何故,我不知道如何通过将form1的引用传递给Form2来实现这一点。我查看了文档,不知道如何编辑这个示例以满足我的需要。因此,我可以创建单例构造函数或引用form1的构造函数,但不能同时创建两者。

如果form1是应用程序的主窗体,那么您应该使用-->
Appliction.MainForm
。这样就不需要参数了

编辑:我不是故意装傻,不回答你的问题。您可以使用多个构造函数创建带有参数的单例,但是,我会尽量避免它

private Singleton(param1,param2) 
public static Singleton MyInstance(param1,param2)

我不确定我是否很理解你的问题,但我认为,你可以实现懒惰。。(Lazy本身实现了单例模式)。也许是这样的:

class Form1
{
  public Form2 Callee
  {
    get;
    set;
  }

  public Form1()
  {
    Callee = Form2.Instance(this).Value;
  }
}

class Form2
{
  public static Lazy<Form2> Instance(Form1 caller)
  {
    return new Lazy<Form2>(() =>
    {
        return new Form2(caller);
    });
  }

  public Form1 Caller
  {
    get;
    private set;
  }

  Form2(Form1 caller)
  {
    Caller = caller;
  }
}
类格式1
{
公共表格2被叫人
{
得到;
设置
}
公共表格1()
{
被调用方=Form2.Instance(this).Value;
}
}
班级表格2
{
公共静态惰性实例(Form1调用方)
{
返回新的延迟(()=>
{
返回新表单2(调用者);
});
}
公用表格1来电者
{
得到;
私人设置;
}
表格2(表格1呼叫者)
{
呼叫者=呼叫者;
}
}

好的,我似乎已经解决了这个问题,下面是代码:

 private Form1 mainForm = null;
public Form2(Form callingForm)
    {
        mainForm = callingForm as Form1;
        InitializeComponent();
    }

    public static Form2 Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new Form2(Application.OpenForms[0] as Form1);
            }
            return instance;
        }
    }
@lrb谢谢,基本上我在这方面有问题,因为Z不能传递任何参数

instance = new Form2(Application.OpenForms[0] as Form1);

还有Application.OpenForms[0]的帮助。

谢谢你,Application.OpenForms[0]解决了这个问题。