单身模态对话框

时间:2012-03-12 16:36:15

标签: c#

是否有可能在单例模式后创建模态对话框?

这个想法是:

public partial class Singleton : Form
{
    private static Singleton _instance = null;

    private Singleton()
    {
        // Initialization code
    }

    public static Singleton Instance
    {
        get
        {
            if (_instance == null)
                _instance = new Singleton();

            return _instance;
        }
    }

    private void Singleton_FormClosing(object sender, FormClosingEventArgs e)
    {
        _instance.Hide();
        e.Cancel = true;
    }

    private void buttonClose_Click(object sender, EventArgs e)
    {
        this.Close();
    }
}

如果表单是非模态的(因此,如果使用Show()方法),此代码可以正常工作,但如果表单是模态的则不起作用(因此,如果使用ShowDialog()方法)因为这个也会隐藏父表格。

2 个答案:

答案 0 :(得分:6)

继续我的评论,不要这样做。不要使表单/对话框成为单例。该对话框应该只显示您要显示的数据。数据的缓存应该在别处 1 处理。因此,在创建对话框时,将其传递给您希望它显示的缓存对象。基本上,使用MVC模式。

  1. 我认为它的数据花费时间而不是对话框本身的结构。如果对话框上的控件构建时间太长,或许对话框太复杂了?

答案 1 :(得分:0)

我认为一切皆有可能,但是:enter image description here

“只是因为你的意思并不代表你应该这样做。”

单例有两个主要目的:将实例数限制为1并为全局变量提供入口点。每当你决定制作一个单身人士时,你就会对你的领域做出一个非常具体和严格的假设,包括你自己在内的所有未来的开发人员都会背负这个假设。也就是说,你正在制定(尴尬)假设只有一个X可能存在。一旦你开始沿着这条路走下去,单身人士的全球性将通过内联客户端电话锁定你,并在以后重新思考它会成为一个痛苦的世界。

所以,问问自己:是否有任何可能的方式我可能需要支持多个对话窗口?如果这个问题的答案是或者甚至可能是“是”,那么你不希望以单身人士的身份做到这一点。如果这个问题的答案是否定的,你可能仍然不希望这样做。