改变形式时运行Singleton的构造函数

时间:2014-02-06 09:22:28

标签: c# winforms singleton

我正在创建一小块软件。 我有三种形式让我头疼。其中两种形式是单身人士。

不是Singleton的表单是一个登录表单,只能在应用程序启动时显示。然后我在登录表单中输入正确的用户名和密码时会显示一个mainform。这很有效。

然后,从menustrip,您可以切换到另一个包含用户列表的表单以及有关这些的一些信息。在那个表单上,我有一个按钮,可以将您带回到主窗体。当我按下那个按钮,而不是直接将我带回主要表格时,我再次看到了登录表单。

点击menustrip项目触发的代码,将您从主窗体带到用户窗体:

private void miBrugere_Click(object sender, EventArgs e)
    {
        userForm = Userform.Instance;
        this.Hide();
        userForm.Show();
    }

它应该从用户窗体带回到主窗体的代码:

private void btnBack_Click(object sender, EventArgs e)
    {
        Mainform mainForm = Mainform.Instance;
        this.Hide();
        mainForm.Show();
    }

在我的mainform加载时运行的代码:

private void Mainform_Load(object sender, EventArgs e)
    {
        if (firstLoad)
        {
            firstLoad = false;
            Loginform loginForm = new Loginform();
            this.Hide();
            loginForm.ShowDialog();
        }
    }

firstLoad变量是classwide。

提前致谢: - )

我已经把它归结为我第一次运行此代码时在userform上创建实例:

public Userform()
    {
        InitializeComponent();
        dgvUsers.AllowUserToAddRows = false;

        Mainform mainForm = Mainform.Instance;
        connString = mainForm.connString;

        --Awesome stuff--
    }

显然,在调用Mainform.instance时,实例为null,因此它创建了一个新的mainform实例,而不是检索已经使用过的实例。当然,这意味着,因为firstLoad是一个类范围的变量,所以它将再次设置为true。

1 个答案:

答案 0 :(得分:0)

  

您的应用程序的主要入口点(通常是主要入口点)   Program.cs中新创建的Windows窗体应用程序的方法)   看起来像?如果它像Application.Run(new Mainform());,   然后你的Mainform不是单身人士。你可能想尝试一下   Application.Run(Mainform.Instance)

答案来自科拉克,所以支持他!