public bool var не обновляет свое значение - PullRequest
0 голосов
/ 30 августа 2011

Я создал public bool LogedIn; в моем login.cs :

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

Но когда я получаю доступ к этому var из другой формы с 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 .

Вот как я вызываю форму Login.cs через Home.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 ]

1 голос
/ 30 августа 2011

Я предполагаю, что у вас есть форма под названием Логин в вашем приложении. Остальное игнорируйте, если предположение неверно.

Вы не ссылаетесь на правильный экземпляр формы входа. В приложении Windows есть коллекция под названием Application.OpenForms. Он содержит все открытые экземпляры формы в вашем приложении. Чтобы получить доступ к правильной форме входа, попробуйте это:

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

Убедитесь, что у вас всегда есть форма входа в систему для выполнения этой задачи. Вы можете использовать Hide вместо Close или CloseDialog для формы входа.

Если вы закрываете форму Login, вы можете создать статический класс, который будет доступен из каждой формы, сохраняя свойства там.

0 голосов
/ 30 августа 2011

Кажется, что у вас есть более одного экземпляра класса Login, каждый со своим isLogedIn var.
Непонятно, где вы создаете экземпляр Login с вашим Login Log = new Login (); линия. Вы пытались установить точку останова и посмотреть, сколько раз ее ударили?
Другая вещь, которую вы могли бы сделать, это поставить точку останова на строку, где установлен isLogedIn, и другую, где вы ее прочитали. Когда будет достигнута настройка точки останова, добавьте часы к экземпляру Login (в этом случае добавьте часы к this ) и выберите Make Object ID из меню правой кнопки мыши. Ваш экземпляр будет отмечен знаком «# 1». Затем сделайте то же самое для переменной Log, когда будет достигнута точка останова чтения. Если метка отличается (т. Е. "# 2"), вы можете быть уверены, что читаете что-то отличное от переменной, которую вы установили ранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...