我在 login.cs 中创建了public bool LogedIn;
:
if(login successful condition)
LogedIn = true;
else
LogedIn = false
但是当我使用Login Log = new Login();
使用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();
}
}
答案 0 :(得分:1)
我假设您的应用程序中有一个名为Login的表单。如果假设错误,请忽略其余部分。
您没有提到正确的登录表单实例。在Windows应用程序中,有一个名为Application.OpenForms
的集合。它包含应用程序中的所有打开表单实例。要访问正确的登录表单,请尝试以下操作:
Application.OpenForms.OfType<Form>().Where(x => x is Login).FirstOrDefault()
确保您始终打开“登录”表单以执行此任务。您可以使用Hide
代替Close
或CloseDialog
作为登录表单。
如果要关闭“登录”表单,可以创建可从每个表单访问的静态类,并保留属性。
答案 1 :(得分:0)
您似乎有多个Login类的实例,每个实例都有一个isLogedIn var。
目前尚不清楚您在哪里使用Login Log实例化登录= new Login();线。你试过在那里设一个断点,看看有多少次被击中?
你可以做的另一件事是在设置了isLogedIn的行上放置一个断点,在另一个放置你读取它的地方。当设置断点被点击时,将一个监视添加到Login实例(在这种情况下,将监视添加到 this )并从右键菜单中选择Make Object ID。您的实例将通过“#1”进行marjked然后在读取断点时对变量Log执行相同操作。如果标记不同(即“#2”),您可以确定您正在阅读与之前设置的变量不同的内容。