使用Singleton时在Winforms之间传递属性

时间:2012-04-24 14:30:45

标签: c# winforms properties singleton

好的,所以我试图将一个布尔值从我的登录表单传递到我的Home表单,通常这对我来说没问题,我只会使用一个属性。但是我想我这次可以使用类似的方法,但我正在表单上实现单例工厂。

以下是与此相关的登录代码: AdminAccess属性设置正常,我检查了值是否正确。

private bool adminAccess;

public bool  AdminAccess
    {
        get { return adminAccess; }
        private set { adminAccess = value; }
    }

private void btnLogin_Click(object sender, EventArgs e)
    {
        //Some Code Does Stuff

         OpenHome();
    }

private void OpenHome()
    {
        HomeForm CreateHomeForm = HomeForm.HomeUI;
        CreateHomeForm.StartupHome = this;

        //Trying to set the property.
        CreateHomeForm.AdminPermissions= this.AdminAccess;

        CreateHomeForm.Show();
        this.Hide();
    }

以下是Home表单中的相关代码:

public HomeForm()
    {
        InitializeComponent();
        //just to check what is in the property quickly
        textBox1.Text = AdminPermissions.ToString();
    }

private bool adminPermissions;
public bool AdminPermissions
    {
        private get { return adminPermissions; }
        set { adminPermissions = value; }
    }

public Form StartupHome
    {
        set;
        get;
    }

private static HomeForm homeUI;
public static HomeForm HomeUI
    {
        get
        {
            if (homeUI == null || homeUI.IsDisposed)
            {
                homeUI = new HomeForm();
            }
            return homeUI;
        }
    }

当HomeUI if循环运行时,该值会重置,因为创建了表单的新实例。我似乎无法想到如何修改它以获得有效的解决方案。你可以告诉我,我很业余,所以我只是想找到一个快速,干净的解决方案:) 非常感谢您提前的时间!

2 个答案:

答案 0 :(得分:0)

在构造函数中,在实际设置AdminPermissions属性之前分配值。像这样改变你的代码

public class HomeForm
{
    public HomeForm()
    {
        InitializeComponent();
    }

    private bool adminPermissions;  
    public bool AdminPermissions
    {
        get { return adminPermissions; }
        set { 
            adminPermissions = value;
            textBox1.Text = value.ToString();
        }
    }

    ...
}

答案 1 :(得分:0)

尝试在其中一个textBox1.Text个事件中设置Form值。首先尝试Loaded,然后Activated。您每次都在构造函数中将其重置为false