Никогда не используйте MessageBox в обработчике событий.Органы управления часто путаются очень , когда фокусировка смещается в одном из их событий.Он продолжает прокручивать, как это, потому что он использует таймер, чтобы позволить непрерывную прокрутку, когда вы опираетесь на кнопку «следующий / предыдущий».Каждый таймер снова прокручивает календарь.Этот таймер не отключается, пока кнопка мыши не поднимется.Что он не может видеть, окно сообщения получило сообщение мыши, потому что оно захватило фокус.Это ошибка в родном элементе управления Windows, но она никогда не проверяется.
Использование Debug.WriteLine () или временного Console.WriteLine () полезно, вывод идет в окно «Вывод» и не связывается с событиями управления.
Один из способов получитьСобытие запускается более одного раза путем случайной подписки на событие более одного раза.В общем, вы не можете предположить, сколько событий вы получите, на это щелкает человек.Убедитесь, что ваш код устойчив к этому.
Способ обойти это поведение - отложить обработку события до после , когда событие перестало выполняться.Элегантно сделано с помощью Control.BeginInvoke ().Как это:
private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e) {
this.BeginInvoke(new DateRangeEventHandler(delayedChanged), sender, e);
}
private void delayedChanged(object sender, DateRangeEventArgs e) {
// etc..
}