Winforms中用户控件之间的共享资源

时间:2013-08-12 15:17:57

标签: winforms user-controls singleton

假设我们有这些类:

public sealed class Singleton
{
    private static readonly Singleton instance = new Singleton();

    private Controller controller;

    private uControl uc; //user control

    public static Singleton Instance
    {
        get { return Singleton.instance; }
    }

    public Controller GetController
    {
        get
        {
            if (this.controller == null)
            {
                this.controller = new Controller();
            }
            return this.controller;
        }
    }

    public uControl UC
    {
        get
        {
            if (this.uc == null)
            {
                this.uc = new uControl();
            }
            return this.uc;
        }
    }
}

public uControl : UserControl
{
    Controller controller = Singleton.Instance.GetController;

    // Do some work with controller class here ...
}

public Form1 : Form
{
    public Form1()
    {
        this.Controls.Add(Singleton.Instance.UC);
    }
}

public Form2 : Form
{
    public Form2()
    {
        this.Controls.Add(Singleton.Instance.UC);
    }
}

是否可以通过Singleton将用户控件uControl添加为两种不同的形式,并期望它们在访问同一控制器类时能够正常工作?

当我尝试这个时,只有首先实例化的表单才能正确显示uControl。另一个表单将获得uControll OK,但在用户控件应该是的表单中只显示空格...

1 个答案:

答案 0 :(得分:0)

你绝对不想那样做。控件的事件,它的位置和用户控件的许多其他东西来自它的父控件,并与之关联。你可以做的是返回一个新的用户控件,其中包含你自己的属性,如宽度和事件处理程序