А можно DateTimePicker использовать нестандартно? Например для ввода интервала времени. - VB

Узнай цену своей работы

Формулировка задачи:

Т.е. например

в переменной хранятся секунды

.
Но хочу отображать их по человечески, т.е. h:mm:ss.
Пример: процесс должен происходить следующий раз через случайное время (случайный интервал задан границами)
Пример кода (тупого для иллюстрации идеи):

В данном примере, если например ввести
TextIntervalFrom.Text=10
TextIntervalTo.Text=20,
то код рассчитает случайную дельту (в секундах) между 10-ю минутами и 20-ю минутами
прибавит этот интервал к тек. времени и получим время след. события
Если допустим 10/20 минут,
то для отображения/ввода могу использовать UpDown где пользователь задает

грубо

минуты.
Но код то работает с секундами, т.е. способен на большее.
Но если надо например задать интервал между 10 и 30 секундами
Или скажем между 2-мя и 3-мя часами.
Т.е. желательно форматировать текст в
0 h 20 min 00 sec
2 h 10 min 00 sec
0 h 01 min 30 sec
Сутки наверно не нужны (можно ограничить 24 ч),
хотя для общности возможность
47 h 00 min 00 sec
не повредит
Высчитывать минуты, часы и секунды самому -да еще чтоб можно было их красиво менять в контроле - умучаешься.
Если дело -дрянь, то оставлю минуты (напр. 0-9999) +UpDown и иже с ним.
Но все же м.б.

можно ли приспособить DTPicker под это дело

?
(интеллектуально работать с переменной, содержащей число секунд)

Решение задачи: «А можно DateTimePicker использовать нестандартно? Например для ввода интервала времени.»

textual
Листинг программы
Private Sub CommandGetSec_Click()
  TextSec.Text = Hour(DTPicker1.Value) * 3600 + Minute(DTPicker1.Value) * 60 + Second(DTPicker1.Value)
End Sub

Private Sub CommandSetSec_Click()
  Dim MyTime As Date
  MyTime = TimeFromSeconds(CLng(Val(TextSec.Text)))
  DTPicker1.Value = MyTime
End Sub

Private Function TimeFromSeconds(the_sec As Long) As Date
  Dim s_hour As Long
  Dim s_min As Long
  Dim s_sec As Long
  
  s_hour = the_sec \ 3600 '3600sec
  s_min = (the_sec Mod 3600) \ 60 '60sec
  s_sec = (the_sec Mod 60)
  
  'Можно конечно TimeSerial(0, 0, the_sec), но это не будет работать при выходе за пределы Integer
  '23:59:59 == 86399 sec
  
  TimeFromSeconds = TimeSerial(s_hour, s_min, s_sec)
End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.857 из 5
Похожие ответы