Аутентификация пользователя с 3 попытками на winforms c#

у меня задача сделать аутентификацию пользователя с 3 попытками и если пользователь введёт неправильно 3 раза свой логин и пароль то на 4 раз написать что ваша карточка заблокирована, с помощью цикла while. Я попытался это сделать но он не изменяет текст на нужный, я попытался добавить после цикла while if(i == 4) { ваша карточка заблокирована } но когда я запускаю форму и ввожу неправильно он пропускает все попытки и сразу выводит ваша карточка заблокирована. Вот мой код:

namespace WinFormsApp3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnBut_Click(object sender, EventArgs e)
        {
            string log = txtLog.Text;
            string pas = txtPas.Text;
            int i = 1;

            while (i <= 3)
            {
                if (log == "Dimas" && pas == "12345")
                {
                    lblRes.ForeColor = Color.Green;
                    lblRes.Text = "Допуск разрешён";
                }
                else
                {
                    lblRes.ForeColor = Color.Red;
                    lblRes.Text = "Допуск запрещён";
                }
                i++;
            }
            if (i == 4)
            {
                lblRes.Text = "Карточка заблокирована";
            }
        }
    }
}

Ответы (1 шт):

Автор решения: CrazyElf

Подумайте - в какой момент меняются log и pas? Они же не меняются внутри цикла while, так какой в этом цикле вообще смысл? Каждый раз при смене этих полей пользователь нажимает кнопку и происходит отдельный заход в метод btnBut_Click, нужно исходить из этой логики. Соответственно, описание и инициализация поля i должны быть снаружи метода btnBut_Click. Собственно, этого будет уже практически достаточно (по-хорошему нужно ещё порядок проверок поменять для красоты), поэтому код не привожу.

→ Ссылка