public void SetDate(DateTime date)
{
_selectedDate = date;
for (int i = 0; i < _daysControls.Count; i++)
_daysControls[i].Dispose();
_daysControls.Clear();
var daysShort = DaysShort;
List<string> daysShortList = new List<string>();
for (int i = (int)(_firstDayOfWeek); i < 7; i++)
daysShortList.Add(daysShort[i]);
for (int i = 0; i < (int)_firstDayOfWeek; i++)
daysShortList.Add(daysShort[i]);
daysShort = daysShortList.ToArray();
var monthStartDayOfWeek = new DateTime(date.Year, date.Month, 1).DayOfWeek;
DateTime startDate = new DateTime(date.Year, date.Month, 1).AddDays(-(int)monthStartDayOfWeek + (int)_firstDayOfWeek);
for (int row = 0; row < 7; row++)
{
for (int column = 0; column < 7; column++)
{
if (row == 0) // Header.
{
Label labelDayOfWeek = new Label();
labelDayOfWeek.Font = new Font("Arial", 11);
labelDayOfWeek.Location = new Point(3 + CellWidth * column, 33);
labelDayOfWeek.Size = new Size(CellWidth, 20);
labelDayOfWeek.Text = daysShort[column];
labelDayOfWeek.TextAlign = ContentAlignment.TopCenter;
labelDayOfWeek.Padding = new Padding();
Controls.Add(labelDayOfWeek);
_daysControls.Add(labelDayOfWeek);
}
else
{
var dayColor = date.Month == startDate.Month ? Color.FromArgb(42, 42, 42) : Color.Gray;
var dayDate = new DateTime(startDate.Year, startDate.Month, startDate.Day);
Button dayButton = new Button();
dayButton.ForeColor = dayColor;
dayButton.Size = new Size(CellWidth, 15);
dayButton.Location = new Point(3 + CellWidth * column, 33 + 15 * row);
dayButton.BackColor = Color.Transparent;
dayButton.BorderColor = Color.Transparent;
dayButton.BorderHoverColor = Color.FromArgb(112, 192, 231);
dayButton.Text = startDate.Day.ToString();
dayButton.Click += (s, a) =>
{
Value = dayDate;
};
Controls.Add(dayButton);
if (TodayDate.Year == startDate.Year && TodayDate.Month == startDate.Month && TodayDate.Day == startDate.Day)
{
dayButton.ForeColor = Color.FromArgb(0, 102, 204);
dayButton.BorderColor = dayButton.ForeColor;
dayButton.BorderHoverColor = dayButton.BorderColor;
dayButton.BackColor = Color.FromArgb(229, 243, 251);
dayButton.HoverColor = dayButton.BackColor;
}
if (Value.Year == dayDate.Year && Value.Month == dayDate.Month && Value.Day == dayDate.Day)
{
dayButton.BorderColor = Color.FromArgb(38, 160, 218);
dayButton.BorderHoverColor = dayButton.BorderColor;
dayButton.BackColor = Color.FromArgb(203, 232, 246);
dayButton.HoverColor = dayButton.BackColor;
}
startDate = startDate.AddDays(1);
_daysControls.Add(dayButton);
}
}
}
}