Графически часы в C#

Элемент DateTimePicker позволяет выбирать даты и диапазоны дат, но нет стандартного элемента управления, который позволяет вам выбирать часы. В этом примере показан один из способов сделать это с помощью PictureBox.

Большая часть этой программы - это метод DrawHours, показанный в следующем коде. Он набирает выбранные часы.

Этот метод очищает PictureBox светло-зеленым цветом. Затем он вычисляет коэффициент масштабирования по горизонтали scale_x для использования при рисовании и использует его для заполнения прямоугольника, представляющего выбранные часы синим цветом. Затем код пеет более 25 часов (от 0 до 24), добавляя отметки, чтобы показать, где часы находятся на чертеже.

Затем метод добавляет поворот на 90 градусов (90 градусов против часовой стрелки) к объекту Graphics, чтобы повернуть будущий рисунок. Он заканчивается, повторяя часы, чтобы нарисовать имя каждого часа. Он использует следующий метод HourToString для преобразования числа часов в его имя.

Метод HourToString просто возвращает строку, соответствующую часовому числу.

В следующем коде показан метод XScale, который программа использует для вычисления коэффициента масштабирования по горизонтали.

Масштабный коэффициент - это только ширина клиентской области элемента управления PictureBox, деленная на количество часов, которые программа рисует.

Остальная часть интересного кода обрабатывает события мыши, которые позволяют пользователю выбирать часы. Следующий процесс MouseDown запускает процесс.

Обработчик событий устанавливает Drawing = true, чтобы указать, что пользователь нажал кнопку мыши. Он делит положение X мыши на коэффициент масштабирования по горизонтали, чтобы увидеть, какой час будет выбран, округление до ближайшего часа. Обработчик события сохраняет час в переменных DrawingStartHour, DrawingStopHour, StartHour и StopHour и обновляет PictureBox, чтобы сделать его перерисовкой.

В следующем коде показан обработчик события MouseMove.

Этот код получает час под мышью так же, как это делает обработчик событий MouseDown. Он вызывает HourToString, чтобы получить имя часа и сравнивает его с текущей подсказкой элемента управления PictureBox. Если имя отличается от текущей всплывающей подсказки, код устанавливает всплывающую подсказку в новое имя часа. (Вы можете удалить это, если подсказка вас раздражает. Я нахожусь на заборе на этом.)

Затем код сохраняет час в DrawingStopHour. Затем он устанавливает StartHour и StopHour, поэтому StartHour <= StopHour. (Если вы этого не сделаете, метод DrawHours ранее неправильно рисует выбранные часы, потому что он пытается нарисовать RectangleF с отрицательной шириной и Graphics не будет делать этого.)

Наконец, метод обновляет PictureBox, чтобы сделать его перерисовкой.

Последним интересным фрагментом кода является следующий обработчик событий MouseUp.

Этот обработчик событий просто очищает всплывающую подсказку элемента PictureBox и вызывает следующий метод DisplayTimes, чтобы отобразить выбранный временной диапазон в текстовых окнах.

Этот метод преобразует выбранные времена в значения DateTime, а затем использует их метод ToShortTimeString для получения хорошо отформатированного вывода.

Источник: http://csharphelper.com/blog/2017/09/graphically-select-hours-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)

Add a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *