У меня есть приложение со многими пользовательскими элементами управления и несколькими кнопками на каждом, каждая кнопка имеет событие OnClick, которое делает некоторые важные вещи, а затем отправляет новый пользовательский элемент управления.C# windows forms handle click spam
Проблема возникает, когда пользователь нажимает очень быстро несколько раз, код события запускается несколько раз, прежде чем выходить на новый пользовательский элемент управления, вызывая проблемы.
Мое текущее решение состоит в том, чтобы отключить кнопку в самой первой строке обработчика событий, но делать это с каждым окном и обработчиком было бы хлопотно, что я могу сделать?
EDIT: Будет ли это хорошим решением для вывода из Button и переопределить событие OnClick, поэтому он всегда проверяет «рабочую» переменную, и если это правда, она не запускает событие? Что-то вроде:
public class MyButton : Button
{
private static bool isWorking = false;
protected override void OnClick(EventArgs e)
{
if (!isWorking)
{
isWorking = true;
base.OnClick(e);
isWorking = false;
}
//Else do nothing
}
}
То же, что и выше, мне пришлось бы реплицировать один и тот же код (if! IsProcessing, set true/false) для каждого обработчика событий, я хочу этого избежать. – user1777914
К сожалению, нет простого решения для того, чтобы все обработчики событий могли что-то сделать, не кодируя их все. – krillgar