День добрый, требуется заблокировать textbox`s на минуту, а потом снять блокировку, и если были введены неверные значения более двух раз. Если в третий раз опять ошибка, то + еще 2 минуты, и т.д. Я пробую следующим образом, но таймер задерживается навсегда:
private void timer1_Tick(object sender, EventArgs e)
{
timer1.Start();
textBox3.Enabled = false;
textBox4.Enabled = false;
timer1.Interval+=1000;
if (timer1.Interval == 15000)
{
timer1.Stop();
textBox3.Enabled = true;
textBox4.Enabled = true;
}
}
Можешь попробовать так. Не самый лучший способ, но вроде как работает.
В глобальные переменные:
int K = 0;
DateTime ed;
На кнопку
if (textBox2.Text != "testwork" && textBox2.Enabled)
{
K++;
if (K > 3)
{
ed = DateTime.Now.AddSeconds((K + 1) * 60);
textBox2.Enabled = false;
timer1.Start();
}
else if (K > 2)
{
ed = DateTime.Now.AddSeconds((K - 1) * 60);
textBox2.Enabled = false;
timer1.Start();
}
else if (K == 2)
{
ed = DateTime.Now.AddSeconds(60);
textBox2.Enabled = false;
timer1.Start();
}
else MessageBox.Show("Вы ввели неверное значение.");
}
else { MessageBox.Show("Good"); K = 0; }
На таймер:
if (DateTime.Now > ed) { textBox2.Enabled = true; timer1.Stop(); }
Можно пойти слегка другим путем.
Определить свой текстбокс, который будет сам хранить количество ошибок
public class MyAwesomeTextbox : TextBox
{
public int ErrorInputCount {get;set;}
}
При обновлении текста в текстбоксе, смотреть на количество ошибок и в зависимости от этого блочить или не блочить текстбокс
private async void Tb_TextChanged(object sender, EventArgs e)
{
var tb = sender as MyAwesomeTextbox;
if (tb.Text != "123")
{
tb.IsEnabled = false;
tb.ErrorInputCount++;
switch(tb.ErrorInputCount)
{
case 1: // 1 ошибка - ничего страшного
break;
case 2: // 2 ошибки - блочим на секунду
await Task.Delay(1000);
break;
case 3: // 3 ошибки - блочим на 2 секунды
await Task.Delay(2000);
break;
default: // более 3 ошибок - 3 секунды
await Task.Delay(3000);
break;
}
tb.IsEnabled = true;
}
else
{
tb.ErrorInputCount = 0; // ввод верный, сброс счетчика ошибок
}
}
Преимущества:
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости