C# 单例表单模式,如何运行 2 个或更多表单? [关闭]

Posted

技术标签:

【中文标题】C# 单例表单模式,如何运行 2 个或更多表单? [关闭]【英文标题】:C# Singleton Form pattern, how to run 2 and more forms? [closed] 【发布时间】:2013-03-11 03:54:19 【问题描述】:

我正在尝试同时运行多个单例表单,但遇到了问题。 我想运行几个相同的表单,因为它们是同一个对象,我不想制作几个单例对象(如果创建的对象很少,单例就会失去它的意义)。 我有这个单例形式的代码:

class SingletonForm : Form

    private static readonly SingletonForm instance = new SingletonForm();

    public static SingletonForm Instance
    
        get
        
            return instance;
        
    

我尝试过:

    SingletonForm f1 = SingletonForm.Instance;
    SingletonForm f2 = SingletonForm.Instance;
    f1.Show();
    Application.Run(f2);

但它只运行一种形式。

如何运行它才能同时运行 2 个或更多单例表单?如果可能的话(我的意思是很容易做到)?

附:有人告诉我这是可能的,我应该尝试一下。

【问题讨论】:

“多个单例形式”是矛盾的。显然,您实际上并不想要这里的单身人士。所以不要使用它。 实际上,您可能需要一个特定表单的实例。 @Lloyd 是的 - 但是 OP 想要乘以实例化一个单例,这没有意义 @Charleh Yeh 你当然是对的。 为什么要使用 f1.Show() 和 Application.Run(f2)?为什么不将 Show-Method 用于这两种形式? 【参考方案1】:

这是Singleton模式,意味着你只能得到一个SINGLE对象。如果要获取 N* 个对象,只需将其从单例中删除并调用构造函数即可。

如果你真的想要,你可以创建某种混合静态,允许你设置可以返回的最大实例数。

public static int MaxInstances;
public static List<MyObject> instanceList;
public static MyObject GetInstance()

    //Fill the instance list up to the MaxInstances

但是,管理这将是困难的,并且可能会导致错误。我猜你也许可以传回实例的索引,然后也可以通过索引请求实例。但是,再一次,这似乎很容易出错,你应该像正常一样使用实例

【讨论】:

以上是关于C# 单例表单模式,如何运行 2 个或更多表单? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

c# 中表单的更多视图

C#如何实现进程单例运行

如何根据后面的输入添加更多的标签?

如何像表单设计器一样将控件置于设计状态模式?

Windows 窗体应用程序 C# - 在调试模式下运行后选项卡控件项移动位置

如何在 C# Winforms 表单之间转换?