public bool var不更新其值

时间:2011-08-30 10:22:41

标签: c# winforms

我在 login.cs 中创建了public bool LogedIn;

if(login successful condition)
LogedIn = true;
else
LogedIn = false

但是当我使用Login Log = new Login();

从另一个表单访问此var时

使用if(Log.LogedIn) LogedIn变量始终 false ,即使用户成功登录也是如此。

为什么这不能在其父表单之外工作/更新其值?

更新代码: 的 Login.cs

public bool isLogedIn;
private void button1_Click(object sender, EventArgs e)
{
        if (i>-1 && (textBox2.Text == DS.Tables[0].Rows[--i][0].ToString()))
        {
            this.DialogResult = DialogResult.OK;
            isLogedIn = true;
        }
        else
        {
            MessageBox.Show("Invalid password supplied for username \"" + comboBox1.Text + "\"", "Login Error.....", MessageBoxButtons.OK);
            isLogedIn = false;
            return;
        }
}

检查 Home.cs

中的更新值
        private void Home_Load(object sender, EventArgs e)
        {
            if (Log.isLogedIn)  // Always False at this position.
            {
                label18.ForeColor = System.Drawing.Color.Green;
                submitButton.Enabled = true;
            }
            else
            {
                label18.ForeColor = System.Drawing.Color.Red;
                submitButton.Enabled = false;
            }
}

我再次检查过...我没有以 Login.cs 形式获得此变量的双重实例。

以下是我通过Home.cs(主窗体)调用Login.cs表单的方法。希望这会有所帮助...

private void loginToolStripMenuItem_Click(object sender, EventArgs e)
{
    Log.FormClosed += new FormClosedEventHandler(Log_FormClosed);
    Log.ShowDialog(this);
    Log.BringToFront();
}

void Log_FormClosed(object sender, FormClosedEventArgs e)
{
    if (Log.isLogedIn)
    {
        // Something here
    }
    else
    {
        // Something here
        if (Log.DialogResult == DialogResult.Cancel)
            Log.Hide();
    }
}

2 个答案:

答案 0 :(得分:1)

我假设您的应用程序中有一个名为Login的表单。如果假设错误,请忽略其余部分。

您没有提到正确的登录表单实例。在Windows应用程序中,有一个名为Application.OpenForms的集合。它包含应用程序中的所有打开表单实例。要访问正确的登录表单,请尝试以下操作:

Application.OpenForms.OfType<Form>().Where(x => x is Login).FirstOrDefault()

确保您始终打开“登录”表单以执行此任务。您可以使用Hide代替CloseCloseDialog作为登录表单。

如果要关闭“登录”表单,可以创建可从每个表单访问的静态类,并保留属性。

答案 1 :(得分:0)

您似乎有多个Login类的实例,每个实例都有一个isLogedIn var。
目前尚不清楚您在哪里使用Login Log实例化登录= new Login();线。你试过在那里设一个断点,看看有多少次被击中?
你可以做的另一件事是在设置了isLogedIn的行上放置一个断点,在另一个放置你读取它的地方。当设置断点被点击时,将一个监视添加到Login实例(在这种情况下,将监视添加到 this )并从右键菜单中选择Make Object ID。您的实例将通过“#1”进行marjked然后在读取断点时对变量Log执行相同操作。如果标记不同(即“#2”),您可以确定您正在阅读与之前设置的变量不同的内容。