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”。