Шаг 200.
Microsoft Visual C++ 2010. Язык С/С++.
Компоненты Windows Forms. Компонент MonthCalendar

    На этом шаге мы рассмотрим назначение, свойства и настройку внешнего вида компонента.


Содержимое этого шага базируется на:
  1. https://metanit.com/sharp/windowsforms/4.15.php
  2. https://studfile.net/preview/7124448/page:41/

    Элемент управления 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;
 }

Примечание. Без изменения свойства VisualStyleState приложения цветовую гамму календаря изменить не получится. В данном примере использовано значение NonClientAreaEnabled. Можно поэкспериментировать со следующими значениями:

    Чтобы отобразить текущую дату внизу элемента управления установите для свойства 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);
 }

    На следующем шаге мы закончим изучение этого вопроса.




Предыдущий шаг Содержание Следующий шаг