Проблема с зависанием WinForms MonthCalendarC#

Место общения программистов C#
Ответить
Anonymous
 Проблема с зависанием WinForms MonthCalendar

Сообщение Anonymous »

У меня довольно простая форма: она должна всплывать, когда я нажимаю кнопку в другой форме.
Это просто календарь на месяц и кнопки ОК/Отмена.
Когда я открываю форму для в первый раз все работает отлично, я могу перемещаться вперед и назад по месяцам, могу выбирать разные дни, это действительно отзывчиво, переменная даты действительно меняется, и результаты работают правильно.
Если я нажму ОК, а затем снова открою форму чтобы выбрать другую дату, он просто сильно тормозит: стрелки для прокрутки месяцев перестают реагировать, иногда не загораются при наведении на них курсора, а мышь становится «некалиброванной», я имею в виду, мой курсор находится на одном месте, и дата, которая выбирается при щелчке левой кнопкой мыши, отличается (или вообще отсутствует).
Это мой код:

Код: Выделить всё

public partial class CalendarForm : Form
{
private DateTime selectedDate;
private bool isDateSelected;

public CalendarForm(DateTime initialDate)
{
InitializeComponent();
InitializeCustomComponents(initialDate);
}

private void InitializeCustomComponents(DateTime initialDate)
{
this.FormBorderStyle = FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
CultureInfo ci = new CultureInfo("es-ES");
monthCalendar.TitleBackColor = System.Drawing.Color.LightBlue;
monthCalendar.TitleForeColor = System.Drawing.Color.White;
monthCalendar.TrailingForeColor = System.Drawing.Color.Gray;
monthCalendar.FirstDayOfWeek = Day.Monday;
monthCalendar.CalendarDimensions = new System.Drawing.Size(1, 1);
monthCalendar.TodayDate = initialDate;
monthCalendar.SelectionStart = initialDate;
monthCalendar.SelectionEnd = initialDate;
btnOK.Click += BtnOK_Click;
btnCancel.Click += BtnCancel_Click;
}

private void BtnOK_Click(object sender, EventArgs e)
{
selectedDate = monthCalendar.SelectionStart;
isDateSelected = true;
this.DialogResult = DialogResult.OK;
this.Close();
}

private void BtnCancel_Click(object sender, EventArgs e)
{
isDateSelected = false;
this.DialogResult = DialogResult.Cancel;
this.Close();
}

public (DateTime, bool) GetSelectedDate()
{
return (selectedDate, isDateSelected);
}
}
и вот здесь форма называется:

Код: Выделить всё

private void btnCalendar_Click(object sender, EventArgs e)
{
using (CalendarForm calendarForm = new CalendarForm(selectedDate))
{
if (calendarForm.ShowDialog() == DialogResult.OK)
{
(DateTime date, bool isDateSelected) = calendarForm.GetSelectedDate();
if (isDateSelected)
{
selectedDate = date;
LoadDataForDate(selectedDate);
}
}
}
}
Есть идеи, что происходит? Что я делаю не так?

Подробнее здесь: https://stackoverflow.com/questions/793 ... thcalendar
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»