是否有可能在单例模式后创建模态对话框?
这个想法是:
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()方法)因为这个也会隐藏父表格。
答案 0 :(得分:6)
继续我的评论,不要这样做。不要使表单/对话框成为单例。该对话框应该只显示您要显示的数据。数据的缓存应该在别处 1 处理。因此,在创建对话框时,将其传递给您希望它显示的缓存对象。基本上,使用MVC模式。
答案 1 :(得分:0)
我认为一切皆有可能,但是:
“只是因为你的意思并不代表你应该这样做。”
单例有两个主要目的:将实例数限制为1并为全局变量提供入口点。每当你决定制作一个单身人士时,你就会对你的领域做出一个非常具体和严格的假设,包括你自己在内的所有未来的开发人员都会背负这个假设。也就是说,你正在制定(尴尬)假设只有一个X可能存在。一旦你开始沿着这条路走下去,单身人士的全球性将通过内联客户端电话锁定你,并在以后重新思考它会成为一个痛苦的世界。
所以,问问自己:是否有任何可能的方式我可能需要支持多个对话窗口?如果这个问题的答案是或者甚至可能是“是”,那么你不希望以单身人士的身份做到这一点。如果这个问题的答案是否定的,你可能仍然不希望这样做。