C# public bool var未更新其值

C# public bool var未更新其值,c#,winforms,C#,Winforms,我已经创建了一个公共bool LogedIn在mylogin.cs中: if(login successful condition) LogedIn = true; else LogedIn = false 但是当我使用Login Log=new Login()从另一个表单访问这个var时 使用if(Log.LogedIn)时,即使用户成功登录,LogedIn变量始终为false 为什么不在其父窗体之外工作/更新其值 更新代码: Login.cs public bool isLogedIn;

我已经创建了一个
公共bool LogedIn在mylogin.cs中:

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;
        }
}
        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;
            }
}
正在检查Home.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;
        }
}
        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();
    }
}

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

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

Application.OpenForms.OfType<Form>().Where(x => x is Login).FirstOrDefault()
Application.OpenForms.OfType()。其中(x=>x是登录名)。FirstOrDefault()
确保始终打开登录表单以执行此任务。您可以使用
Hide
代替登录表单的
Close
CloseDialog


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

似乎您有多个登录类实例,每个实例都有其isLogedIn变量。
使用Login Log=new Login()实例化Login的位置不清楚;线你有没有试过在那里设置一个断点,看看它被击中了多少次?

您可以做的另一件事是在设置isLogedIn的行上放置一个断点,并在读取它的行上放置另一个断点。当点击设置断点时,向登录实例添加一个监视(在本例中,向该实例添加一个监视),并从右键单击菜单中选择“生成对象ID”。您的实例将被一个“#1”标记,然后在命中读取断点时对变量日志执行相同的操作。如果标记不同(即“#2”),您可以确定您读取的变量与之前设置的变量不同。

FYI,log的过去时记录为两个g。请显示更多代码。我猜您正在创建两个独立的
登录实例
,但我们无法从您显示的内容中分辨出来。您正在以其他形式创建新的登录实例吗?如果是这样的话,你怎么能期望在一个实例中设置的值在另一个实例上???@BoltClock只是一个疑问。。。你是否总是在变量名中使用
拼写检查
&
语法检查
?我想知道你在编码的时候做这么有趣的事情会得到什么?我的老师从来没有告诉我在编码时使用正确的拼写。。。所以我一直使用唯一的变量名。。。希望这样的拼写不会冒犯程序员社区。@gsvirdi这个词的拼写是“you”。