Es ist nur ein Monatskalender und die Schaltflächen OK/Abbrechen.
Wenn ich das Formular öffne Beim ersten Mal funktioniert es großartig, ich kann in den Monaten hin und her wechseln, ich kann verschiedene Tage auswählen, es reagiert wirklich und die Datumsvariable ändert sich tatsächlich und die Rückgaben funktionieren ordnungsgemäß.
Wenn ich OK drücke und dann das öffne Wenn ich das Formular erneut auswähle, um ein anderes Datum auszuwählen, kommt es nur zu massiven Verzögerungen: Die Pfeile zum Scrollen durch die Monate reagieren nicht mehr, leuchten manchmal nicht auf, wenn ich darüber schwebe, und die Maus wird „unkalibriert“, das heißt, mein Cursor steht auf einem Ort, und das Datum, das beim Linksklick ausgewählt wird, ist ein anderes (oder gar keins).
Das ist mein Code:
Code: Select all
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);
}
}
Code: Select all
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);
}
}
}
}