Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 1446 / 158 | Оценка: 4.31 / 4.00 | Длительность: 25:42:00
Лекция 15:

Стандартные элементы управления

Элемент выбора даты и времени DateTimePicker

Пример программы

using System;
using System.Drawing;
using System.Windows.Forms;
    
namespace Test
{
    // Класс приложения
    class MyClass : Form
    {
        // Объявления полей
    
        public MyClass()    // Конструктор
        {
            this.Text = "Как быстро летит время!";
            this.FormBorderStyle = FormBorderStyle.FixedSingle;
            // Замыкаем размеры
            this.MaximizeBox = false;
            this.StartPosition = FormStartPosition.CenterScreen;
    
            // Адресовали один объект
            Label lbl = new Label();    // Первая надпись
            lbl.Parent = this;          // Отдали форме
            lbl.Text = "Начальная дата: ";
            lbl.AutoSize = true;
            lbl.Location = new Point(Font.Height, Font.Height);
    
            int xDateTimePicker = lbl.Right;
    
            // Этой же ссылкой адресовали другой объект
            lbl = new Label();          // Вторая надпись
            lbl.Parent = this;          // Отдали форме
            lbl.Text = "Целевая дата: ";
            lbl.AutoSize = true;
            // Позиционируем ниже
            lbl.Location = new Point(Font.Height, Font.Height * 3);
    
            // Позиция правее правого
            xDateTimePicker = Math.Max(xDateTimePicker, lbl.Right);
    
            // Этой же ссылкой адресовали еще один объект
            lbl = new Label();
            lbl.Parent = this;
            lbl.Text = "Прошло времени:";
            lbl.AutoSize = true;
            // Позиционируем еще ниже
            lbl.Location = new Point(Font.Height, Font.Height * 5);
    
            // Позиция правее правого
            xDateTimePicker = Math.Max(xDateTimePicker, lbl.Right);
    
            // Первое поле даты
            dtpBegin = new DateTimePicker();
            dtpBegin.Parent = this;
            dtpBegin.Location = new Point(xDateTimePicker, Font.Height);
    
            // Второе поле даты
            dtpEnd = new DateTimePicker();
            dtpEnd.Parent = this;
            dtpEnd.Location = new Point(xDateTimePicker, Font.Height * 3);
    
            // Регистрируем общий обработчик
            dtpBegin.ValueChanged += DateTimePickerValueChanged;
            dtpEnd.ValueChanged += DateTimePickerValueChanged;
    
            lblResult1 = new Label();
            lblResult1.Parent = this;
            lblResult1.AutoSize = true;
            // X пересчитываем в обработчике
            lblResult1.Location = new Point(0, Font.Height * 7);
            // Формируем фонт для меток результата
            Font fnt = new Font("Arial", 12, FontStyle.Bold);
            lblResult1.Font = fnt;
            lblResult1.ForeColor = Color.Red;
    
            lblResult2 = new Label();
            lblResult2.Parent = this;
            lblResult2.AutoSize = true;
            // X пересчитываем в обработчике
            lblResult2.Location = new Point(0, Font.Height * 9);
            lblResult2.Font = fnt;
            lblResult2.ForeColor = Color.Blue;
    
            // Изменяем размеры окна
            this.ClientSize = new Size(dtpEnd.Right + Font.Height, 
				Font.Height * 11);
        }
    
        void DateTimePickerValueChanged(object sender, EventArgs e)
        {
            String str;
    
            if (dtpBegin.Value > dtpEnd.Value)
                return;
            else
            {
                DateTime dtBegin = dtpBegin.Value;
                DateTime dtEnd = dtpEnd.Value;
    
                int iYears = dtEnd.Year - dtBegin.Year;
                int iMonths = dtEnd.Month - dtBegin.Month;
                int iDays = dtEnd.Day - dtBegin.Day;
    
                if (iDays < 0)
                {
                    iDays += DateTime.DaysInMonth(dtEnd.Year, 1 + 
			(dtEnd.Month + 10) % 12);
                    iMonths -= 1;
                }
    
                if (iMonths < 0)
                {
                    iMonths += 12;
                    iYears -= 1;
                }
    
                str = String.Format("{0} - лет; {1} - 
			месяцев; {2} - дней",
                    iYears, iMonths, iDays);
            }
    
            lblResult1.Text = str;
            // По горизонтали позиционируем в центр
            int x = (this.ClientSize.Width - lblResult1.Width) / 2;
            int y = lblResult1.Location.Y;
            lblResult1.Location = new Point(x, y);
    
            // Получаем разницу во времени
            TimeSpan time = dtpEnd.Value - dtpBegin.Value;
            str = String.Format("({0} дней); ({1} часов)", 
                (long)time.TotalDays,
                (long)time.TotalHours);
            // По горизонтали позиционируем в центр
            lblResult2.Text = str;
            x = (this.ClientSize.Width - lblResult2.Width) / 2;
            y = lblResult2.Location.Y;
            lblResult2.Location = new Point(x, y);
        }
    }
    
    // Запуск
    class Program
    {
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new MyClass());
        }
    }
}
Листинг 15.6 . Пример программы с использованием DateTimePicker

Результат выполнения


Если дату задает не пользователь, а программа, то вначале нужно сформировать структуру DateTime, затем ее присвоить свойству Value элемента DateTimePicker. Свойство DateTimePicker. Format, которое ожидает один из членов перечисления DateTimePickerFormat, определяет формат отображения содержимого поля элемента DateTimePicker. Свойства Value типа DateTime можно вычитать друг из друга. Полученная разница типа TimeSpan имеет, в том числе, свойства TotalDays, TotalHours.

Максим Филатов
Максим Филатов

Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет:

Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.

 

Как активировать код?