У меня есть форма, которую я хочу закрыть через 5 секунд, если не выполняется взаимодействие с мышью, но если выполняется какое-либо взаимодействие с мышью, я хочу, чтобы она закрывалась countdown + 5 seconds
, и каждое взаимодействие увеличивало ее на 5 секунд.
Вот что я придумал до сих пор:
int countdown = 5;
System.Timers.Timer timer;
Запустить таймер
timer = new System.Timers.Timer(1000);
timer.AutoReset = true;
timer.Elapsed += new System.Timers.ElapsedEventHandler(ProcessTimerEvent);
timer.Start();
Событие
private void ProcessTimerEvent(Object obj, System.Timers.ElapsedEventArgs e)
{
--countdown;
if (countdown == 0)
{
timer.Close();
this.Invoke(new Action(() => { this.Close(); }));
}
}
И только для тестирования я использую событие мыши формы, чтобы увеличить обратный отсчет на 5, но мне придется изменить его на другое событие, потому что, если вы нажмете на метку или любой другой элемент управления в форме, это не увеличит таймер.
private void NotifierTest_MouseClick(object sender, MouseEventArgs e)
{
countdown += 5;
}
Вопросы
Я реализую обратный отсчет, где счетчик можно правильно увеличить?
Должен ли я что-то изменить?
Как бы вы это сделали, если бы что-то отличалось от того, что сделал я?
Как мне обрабатывать захват щелчка мыши?
Использование крюка низкого уровня?
Используя положение щелчка мыши и проверьте, было ли оно на моей winform?
Другой вариант
Другой вариант, о котором я сейчас думаю, - это зафиксировать, находится ли мышь в области формы или нет, и включить / отключить обратный отсчет закрытия, если она не находится в области, но я не уверен, как взаимодействовать с мышью для этого, поэтому выше вопросы о том, как я буду взаимодействовать с мышью.
countdown += 5
, вы можете просто сбросить его, используяcountdown = 5
, который сбросит его до 5 секунд, а не накапливает при каждом взаимодействии с мышью. - person Chris Taylor   schedule 25.04.2011