На этом шаге мы рассмотрим назначение, свойства и настройку внешнего вида компонента.
Элемент управления Windows Forms MonthCalendar предоставляет пользователям понятный графический интерфейс для просмотра и задания сведений о дате.
Этот элемент управления выводит сетку, содержащую пронумерованные дни месяца, разбитые на столбцы по дням недели. Перейти к другому месяцу можно, нажав кнопку со стрелкой справа или слева от заголовка месяца. В отличие от аналогичного элемента управления DateTimePicker, данный элемент управления позволяет выделить диапазон дат; однако элемент управления DateTimePicker может использоваться для задания не только даты, но и времени.
Рис.1. Компонент MonthCalendar на форме в режиме дизайна
Свойства этого компонента представлены на рисунке 2:
Рис.2. Свойства компонента MonthCalendar
Перечислим назначение некоторых из них:
Внешний вид элемента управления MonthCalendar можно настроить множеством способов. По умолчанию текущая дата обводится кружком, а также отмечается в нижней части сетки. Это используемое по умолчанию поведение можно изменить, присваивая свойствам ShowToday и ShowTodayCircle значение False. В календарь можно также добавить номера недель, задав для свойства ShowWeekNumbers значение True. С помощью свойства CalendarDimensions можно задать отображение нескольких месяцев по вертикали или по горизонтали. По умолчанию в качестве первого дня недели отображается воскресенье, но с помощью свойства FirstDayOfWeek любой день недели можно назначить первым.
Можно также задать единовременное, ежегодное или ежемесячное отображение полужирным шрифтом определенных дат, добавив объекты DateTime в свойства BoldedDates, AnnuallyBoldedDates и MonthlyBoldedDates:
Ключевым свойством элемента управления MonthCalendar является свойство SelectionRange, представляющее собой диапазон дат, выделенных в элементе управления. Значение SelectionRange не может превышать максимального количества дней, которые можно выделить, заданного в свойстве MaxSelectionCount. Самая ранняя и самая поздняя даты, которые может выбрать пользователь, определяются свойствами MaxDate и MinDate.
Предусмотрено множество возможностей настройки внешнего вида элемента управления Windows Forms MonthCalendar. Например, предоставляется возможность выбора цветовой схемы, а также отображения или скрытия номеров недель или текущей даты.
Чтобы изменить цветовую схему календаря установите свойства TitleBackColor, TitleForeColor и TrailingForeColor. Свойство TitleBackColor также определяет цвет шрифта для дней недели. Свойство TrailingForeColor определяет цвет дат, предшествующих и следующих за отображаемым месяцем или месяцами.
// Изменение цветовой палитры private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { // Применить визуальные стили только к неклиентской области. Application::VisualStyleState = System::Windows::Forms::VisualStyles::VisualStyleState::NonClientAreaEnabled; // Изменить цветовую палиту monthCalendar1->TitleBackColor = System::Drawing::Color::Blue; monthCalendar1->TrailingForeColor = System::Drawing::Color::Red; monthCalendar1->TitleForeColor = System::Drawing::Color::Yellow; }
Чтобы отобразить текущую дату внизу элемента управления установите для свойства ShowToday значение True. В приведенном ниже примере переключение между отображением и скрытием текущей даты происходит при выполнении двойного щелчка на форме.
// Двойной щелчок на форме private: System::Void Form1_DoubleClick(System::Object^ sender, System::EventArgs^ e) { // Показ/скрытие сегодняшней даты monthCalendar1->ShowToday = !monthCalendar1->ShowToday; }
Элемент управления MonthCalendar позволяет отображать на экране одновременно до 12 месяцев. По умолчанию в этом элементе управления отображается только один месяц, однако имеется возможность указать количество месяцев, которые будут отображаться на экране, и их размещение в данном элементе управления.
Чтобы отобразить несколько месяцев задайте для свойства CalendarDimensions значение, равное числу месяцев, отображаемых по горизонтали и вертикали.
// Переключение между отображением двух/одного месяца private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e) { if ( monthCalendar1->CalendarDimensions == System::Drawing::Size(2, 1) ) monthCalendar1->CalendarDimensions = System::Drawing::Size(1, 1); else monthCalendar1->CalendarDimensions = System::Drawing::Size(2, 1); }
На следующем шаге мы закончим изучение этого вопроса.