在c#.net winforms中保存变量的值

时间:2011-03-09 10:16:50

标签: c# .net winforms global-variables retain

我有一个带有按钮的表单,在按钮单击事件上,变量locklogin增加1

当locklogin = 3时,表单按钮被禁用,表单需要关闭。 在关闭表单时,locklogin失去了它的价值。

但我希望保持其值,虽然表单被关闭,当表单再次运行时(整个应用程序再次执行),然后按钮仍然被禁用。我该怎么做?

 public partial class Form1 : Form
{
    static int loginlocked;
    static int isloginlocked;
    public Form1()
    {
        InitializeComponent();

        if (isloginlocked == 3)
        {
            foreach (Control c in this.Controls)
            { c.Enabled = false; }

        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        loginlocked++;
        if (loginlocked == 3)
        {
            foreach (Control c in this.Controls)
            { c.Enabled = false; }

            this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);

        }
    }
    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        isloginlocked = loginlocked;
        if (e.CloseReason == CloseReason.UserClosing)
        {

            if (MessageBox.Show(this, "Really?", "Closing...",
                 MessageBoxButtons.OKCancel, MessageBoxIcon.Question)
                == DialogResult.Cancel) e.Cancel = true;
        }
    }
}

我希望在打开表单/应用程序时首先检查变量的值是否为3,如果是3,那么它应该禁用它上面的按钮。

5 个答案:

答案 0 :(得分:5)

我会开始考虑将您的逻辑与UI分开。有多种方法可以实现这一点,我已经包含了一些入门链接。

单击按钮时,我会有一个Controller或Presenter对象侦听表单中的事件。此Controller对象维护计数器,负责在构造期间创建和销毁表单并设置初始值,例如是否禁用按钮。表单可以尽可能愚蠢,而不必担心这样的业务逻辑。

Model-View-Controller

Model-View-Presenter

Some discussion and examples

答案 1 :(得分:3)

通过变量static

当然,由于您暗示将在程序中多次创建 new 表单,您必须在构造函数中设置按钮的启用状态(在InitializeComponent之后) )。

答案 2 :(得分:1)

如果表单关闭时应用程序关闭您可以将变量保存到flatfile或xml文件中。 或者,如果关闭表单时应用程序仍在运行,请将变量声明在除表单

之外的其他位置

答案 3 :(得分:1)

使用计数器创建一个静态变量或类似简单的单例。而不是重置值,使用Mod运算符使locklogin%3 == 0,关闭表单。锁定登录值可以保持递增而不会丢失值。您将需要在第一次使用变量时处理(例如locklogin!= 0)

答案 4 :(得分:0)

你可以使用设置类。这里可以找到一个很好的例子 - http://www.codeproject.com/Articles/17659/How-To-Use-the-Settings-Class-in-C