我有一个带有按钮的表单,在按钮单击事件上,变量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,那么它应该禁用它上面的按钮。
答案 0 :(得分:5)
我会开始考虑将您的逻辑与UI分开。有多种方法可以实现这一点,我已经包含了一些入门链接。
单击按钮时,我会有一个Controller或Presenter对象侦听表单中的事件。此Controller对象维护计数器,负责在构造期间创建和销毁表单并设置初始值,例如是否禁用按钮。表单可以尽可能愚蠢,而不必担心这样的业务逻辑。
答案 1 :(得分:3)
通过变量static
。
当然,由于您暗示将在程序中多次创建 new 表单,您必须在构造函数中设置按钮的启用状态(在InitializeComponent
之后) )。
答案 2 :(得分:1)
如果表单关闭时应用程序关闭您可以将变量保存到flatfile或xml文件中。 或者,如果关闭表单时应用程序仍在运行,请将变量声明在除表单
之外的其他位置答案 3 :(得分:1)
使用计数器创建一个静态变量或类似简单的单例。而不是重置值,使用Mod运算符使locklogin%3 == 0,关闭表单。锁定登录值可以保持递增而不会丢失值。您将需要在第一次使用变量时处理(例如locklogin!= 0)
答案 4 :(得分:0)