
- •Часть 2. Сборник рецептов по визуальному программированию Введение в объектно-ориентированное программирование
- •Создание проекта в VisualStudio
- •Файлы проекта
- •Сведения об объекте
- •Общие свойства всех объектов
- •Класс Form
- •Помещение компонента в форму и прочие действия с дизайнером форм
- •Свойства форм
- •События формы
- •Методы формы
- •Компоненты ввода и отображения текстовой информации Компонент Label
- •Некоторые свойства компонента Label
- •Компонент TextBox
- •Методы TextBox
- •Компонент RichTextBox
- •Ввод числовых значений в компонент TextBox
- •Проверка, введены ли значения
- •Компонент ListBox
- •Компонент ComboBox
- •Ввод данных из файла
- •Компонент MaskedTextBox
- •Кнопки, индикаторы и управляющие элементы Компонент Button
- •Компонент Panel
- •Компоненты RadioButtonиCheckBox
- •Компонент GroupBox
- •Пример. Комплектация автомобиля
- •Работа с меню Главное меню
- •Контекстное меню
- •Создание текстового редактора
- •Системные диалоги
- •Компонент OpenFileDialog
- •Компонент SaveFileDialog
- •Диалог выбора шрифта
- •Диалог выбора цвета
- •Компонент PrintDialog
- •Диалоговые окна в текстовом редакторе
- •Расширенные символы Unicode
- •Работа с графикой Использование графических файлов
- •Создание фотоальбома
- •Методы для рисования на форме и прочих компонентах
- •Работа с таймером
- •Работа с датой и временем
- •Добавление новых форм к проекту
- •Многостраничные панели
- •Способы задания страниц
- •Методы TabControl
Работа с датой и временем
Компонент «Календарь» - DateTimePickerнаходится в спискеCommonControlsпалитры компонентов и позволяет пользователю выбирать необходимую дату или время. При выборе даты или времени (это задается в свойствеFormat) компонент может представляться в двух формах: в виде прямоугольного поля, в котором высвечиваются дата или время, и в виде выпадающего списка с датами.
Выборка данных в обеих формах организована с использованием механизма прокрутки.
В форме без выпадающего списка используют установку свойства ShowUpDownв значениеtrue. Тогда вместо кнопки раскрытия выпадающего списка появляется элемент прокрутки содержимого поля. С его помощью можно увеличивать или уменьшать значения отмеченного элемента данного, тем самым значительно ускоряя поиск.
Если работа осуществляется с выборкой даты из выпадающего списка, то он открывается кнопкой с флагом. В окне списка тоже имеются прокручивающие механизмы (по краям окна – стрелки вправо/влево) не только в целом для даты, но и отдельно для выбора месяца и прокрутки величины года.
Если включено свойство ShowCheckBox(рис), то слева от выбранной даты появляется флажок (при условии, что свойствоCheckedтоже будет установлено вtrue). Если флажок включен, то выбранную дату (кроме наименования месяца) можно редактировать (щелчком мыши надо отметить соответствующий элемент, а затем ввести с клавиатуры свое значение). Если флажок выключить, дата становится недоступной.
DateTimePicker с установленными значениями ShowUpDown и ShowCheckBox
Выбранная с помощью DateTimePickerдата помещается в его свойствоValue, откуда ее можно брать в режиме исполнения приложения. Существуют свойстваMaxDateиMinDate, которые задают диапазон изменения даты. Значения этих свойств можно установить тоже с помощью механизма календаря (календарь открывается для выборки из него необходимой даты, если нажать кнопку с галочкой в поле каждого из этих свойств).
Задание этих свойств – это механизм контроля выборки (при осуществлении выборки система не позволит выбрать даты вне указанного диапазона).
Например, если установить диапазон между 01.03.2010 и 08.03.2010, то не получится выбрать, например, дату 09.03.2010. При разработке конкретного приложения можно использовать этот механизм, задавая диапазон дат во время исполнения приложения, что будет определенной гарантией того, что пользователь, вводя даты, не совершит ошибки.
Значения дат могут выводиться в четырех форматах, что определяется свойством Format:
Long– длинный формат. Если выбрать это значение, то дата станет выводиться в виде: «12 апреля 2010 г.»;
Short– короткий формат. Если выбрать это значение, то дата станет выводиться в виде: «12.04.2010»;
Time – формат времени;
Custom– при выборе этого формата надо установить свойствоCustomFormatв соответствующее значение, принятое в среде разработки (Пахомов, стр. 430-431).
Дата и время относятся к типу DateTime, который имеет специальный механизм, позволяющий представлять эти две величины в виде строки. Причем имеются две категории перевода даты в строку: стандартная и пользовательская. Там, где стандартный способ перевода даты в строку не подходит, применяется т.н. пользовательский формат.
Перевод даты в строку необходим, например, для вывода даты на экран в удобном для пользователя формате.
Форматирование датпроисходит с помощью задания специальной форматной строки, а когда такая строка не задается, то форматирование происходит по правилам умолчания. Форматная строка содержит специальные символы форматирования, определяющие, как значение даты станет преобразовываться.
При разработке приложений часто приходится сталкиваться с необходимостью работы с датами, а не только с форматированным выводом дат. Приходится заниматься декомпозицией даты (разбиением ее на число, месяц, год) и последующей работой с каждой из ее частей, приходится добавлять к дате дни, месяцы и годы, сравнивать даты, складывать и вычитать их, переводить содержимое строки, в которой записана дата, в тип DateTime(это можно выполнить с помощью методаParse(String)).
Например, для вывода даты в качестве строки можно написать следующую функцию с двумя параметрами: форматом вывода даты и учетом региональных настроек времени:
String ^s=date1.ToString(“dd/MM/yyyy \’г\’, dddd”, DateTimeFormatInfo:: CurrentInfo);
Рассмотрим вычитание дат. Для демонстрации работы с операцией разработаем следующее приложение.
Это приложение вычитает из даты-1 (объект date1) дату-2(объектdate2) и разность записывает в компонент типаLabel(объектlabel4), далее, в объектlabel6помещается дата, полученная вычитанием из даты-2 найденной разницы в днях. Заметим, что разница отрицательна, если дата-1 меньше даты-2.
Вычисление разностей осуществляется в методе ValueChangeдля компонентаDateTimePicker. Запишем обработчик события для одного календаря, для второго выберем уже созданный обработчик из списка.
System::DateTime d1=this->date1->Value;
System::DateTime d2=this->date2->Value;
System::TimeSpan R=d1.Subtract(d2);
label4->Text=R.ToString();
System::DateTime S=d2.Subtract(R);
label6->Text=S.ToString();
Заметим, что разность значений дат записывается в структуру типа TimeSpan. При вычислении разности стоит помнить, что методSubtractприменяется к уменьшаемому, а в качестве его параметра указывается вычитаемое.
Еще одно приложение можно создать с использованием значений текущей даты и времени: посчитать время, прошедшее с наступления некоторого события (покупки домашнего животного, сдачи экзаменов, начала отпуска, приобретения автомобиля, и т.д.). Разработку этого приложения оставим в качестве упражнения.
При сложениидат возможно только добавление к текущей дате заданного данными классаTimeSpanинтервала времени. На этом основана работа методаAdd(). Кроме того, существуют методыAddDays(),AddMonths(),AddYears(), которые позволяют добавить к некоторой дате число дней, месяцев или лет, заданное значением типаint.