C# 在两个windows窗体(其中一个窗体为singleton)之间发送数据
我有以下问题,我有两个windows窗体,为了在它们之间发送数据,我发现在Form2(由Form1调用)构造函数中,我将传递对Form1的引用 像这样C# 在两个windows窗体(其中一个窗体为singleton)之间发送数据,c#,.net,winforms,C#,.net,Winforms,我有以下问题,我有两个windows窗体,为了在它们之间发送数据,我发现在Form2(由Form1调用)构造函数中,我将传递对Form1的引用 像这样公共表单2(表单调用表单) { mainForm=调用Form1形式的表单; 初始化组件(); } 但我希望Form2是单例的,不知何故,我不知道如何通过将form1的引用传递给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]解决了这个问题。