Программа всегда входит в систему, даже если имя пользователя неверно

1

У меня проблемы. Когда мой mainForm запускается, пользователь сначала видит диалоговое окно, в котором им нужно войти/сделать нового пользователя. Который в прошлом работал нормально. Это был код:

            private void loginButton_Click(object sender, EventArgs e)
    {

        try
        {
            var sr = new System.IO.StreamReader(inlogNaamTextbox.Text + ".\\Login.txt");
            gebruikersnaam = sr.ReadLine();
            passwoord = sr.ReadLine();
            sr.Close();

            if (onthoudMij.Checked)
            {
                Properties.Settings.Default.Gebruikersnaam = inlogNaamTextbox.Text;
                Properties.Settings.Default.Passwoord = inlogPasswoordTextbox.Text;
                Properties.Settings.Default.Save();
            }

            if (gebruikersnaam == inlogNaamTextbox.Text && passwoord == inlogPasswoordTextbox.Text)
            {
                klasseGebruikersnaam.gebruikersnaam = inlogNaamTextbox.Text;
                MessageBox.Show("Je bent nu ingelogd!", "Succes!");
                this.Dispose();
            }

            else
                MessageBox.Show("Gebruikersnaam of wachtwoord fout!", "Fout!");
        }

        catch (System.IO.DirectoryNotFoundException ex)
        {
            MessageBox.Show("De gebruiker bestaat niet!", "Fout!");
        }

    }

И я назвал эту форму в моем событии загрузки mainForm. Теперь проблема заключалась в том, что всякий раз, когда я пытался вернуться к MainForm, в то время как в моей программе, диалоговое окно появлялось, так как оно было связано с mainform loadevent.

Поэтому для решения этой проблемы я добавил это в program.cs

     using (var loginForm = new startForm())
{
    if (loginForm.ShowDialog() == DialogResult.OK)
    {
        Application.Run(new indexForm()); 
    }

Я назначил loginForm acceptbutton → loginButton & dialogresult → Да

Но теперь проблема всегда, когда я пытаюсь войти в программу, открывается всегда. Таким образом, даже когда при входе я ввожу несуществующий пароль (программа показывает сообщение, в котором говорится, что его не существует), а затем после нажатия кнопки ok программа все равно открывается, хотя она не должна.

так или иначе?

Заранее спасибо.

Теги:
login
dialog

2 ответа

3
Лучший ответ

Когда пользователь не может выполнить проверку подлинности, вам необходимо сообщить об этом сбое.
Поэтому добавьте эту строку в свою кнопку.

           .....
       }
       else
       {
            MessageBox.Show("Gebruikersnaam of wachtwoord fout!", "Fout!");
            this.DialogResult = DialogResult.Cancel;
       }

Теперь в Program.cs вы не попадаете в состояние

if (loginForm.ShowDialog() == DialogResult.OK)
{
    Application.Run(new indexForm()); 
}

потому что, в случае ошибки, результатом loginForm будет DialogResult.Cancel.

Тем не менее, лучший подход заключается в том, чтобы остаться внутри loginForm, если ваш пользователь не попросит отменить вход и остановить приложение. В этом случае я бы

    ....
  else
  {
      MessageBox.Show("Gebruikersnaam of wachtwoord fout!", "Fout!");
      this.DialogResult = DialogResult.None;
  }

Применение значения DialogResult.None enum к свойству DialogResult формы отменяет процесс закрытия формы Dialog и позволит вашему пользователю исправить недопустимый ввод.

Последнее примечание: это должно применяться также внутри блока исключений

    catch (System.IO.DirectoryNotFoundException ex)
    {
        MessageBox.Show("De gebruiker bestaat niet!", "Fout!");
        this.DialogResult = DialogResult.None;
    }
  • 0
    Спасибо, что сделали это!
  • 0
    Не забудьте блок исключений
Показать ещё 3 комментария
0

Но теперь проблема всегда, когда я пытаюсь войти в программу, открывается всегда. Таким образом, даже когда при входе я ввожу несуществующий пароль (программа показывает сообщение, в котором говорится, что его не существует), а затем после нажатия кнопки ok программа все равно открывается, хотя она не должна.

Да, потому что ваш код говорит, что программа должна запускаться, если результат диалогового окна в порядке:

if (loginForm.ShowDialog() == DialogResult.OK)
{
    Application.Run(new indexForm()); 
}

Чтобы исправить это, измените свой код loginForm, чтобы кнопка "ОК" не была нажата, если только учетные данные не действительны, или измените код, показанный здесь, чтобы он тестировал другое состояние.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню