powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Стирается значение DTPicker (время) после редактирования с клавиатуры (не стрелками)
8 сообщений из 8, страница 1 из 1
Стирается значение DTPicker (время) после редактирования с клавиатуры (не стрелками)
    #39330817
JustNick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток!

Какой-то интересный случай, можно даже сказать медицинский...
Из истории: есть два датапикера в формате времени:
CustomFormat : HH:mm
Format : 3 - dtpCustom

Туда соответственно вводится начало и окончание временного промежутка. Когда пользователь вводит данные, надо округлять их до 5 минут в бОльшую сторону.

Примеры
ввел 15:52, округлить до 15:55
ввел 15:58, округлить до 16:00
и т.д.

Реализация
на событии Exit висит такой код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Dim mi As Integer
Dim TimeVal as Date

TimeVal = DTPicker1.Value

mi = IIf(DatePart("n", TimeVal) Mod 5 > 0, ((DatePart("n", TimeVal) \ 5) + 1) * 5, DatePart("n", TimeVal))
DTPicker1.Value = FormatDateTime(CStr(IIf(mi >= 60, 1, 0) + DatePart("h", TimeVal)) & ":" & CStr(IIf(mi >= 60, 0, mi)), vbShortTime)



А теперь о проблеме. Все работает отлично, пока не начинаю вводить значение руками. Т.е. если поставить курсор на минуты, нажимать стрелки вверх/вниз на клавиатуре или мышой, то все хорошо. А если просто ввести цифры с клавиатуры, то при выходе из датапикера, значение затирается. При этом если поставить Breakpoint в коде и продебажить, то все опять работает... Проверила - больше нигде в коде не меняется значение датапикера.

Что за неуловимый глюк, как его побороть?
...
Рейтинг: 0 / 0
Стирается значение DTPicker (время) после редактирования с клавиатуры (не стрелками)
    #39332189
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JustNick,

Среда, так понимаю, VBA? События Exit не существует в VB6 для этого контрола. В Excel 2010 указанное у меня не проявляется...

Ещё, я перешёл бы на работу с датами, без конвертации в строки, а то может подвести когда-нибудь.

Код: vbnet
1.
2.
3.
4.
5.
6.
Private Sub DTPicker2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Dim TimeVal As Date

    TimeVal = DTPicker2.Value
    DTPicker2.Value = DateAdd("n", 5 - IIf(DatePart("n", TimeVal) Mod 5 = 0, 5, DatePart("n", TimeVal) Mod 5), TimeVal)
End Sub
...
Рейтинг: 0 / 0
Стирается значение DTPicker (время) после редактирования с клавиатуры (не стрелками)
    #39332963
JustNick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VSVLAD,

спасибо за ответ, среда действительно VBA, точнее Excel 2010. Еще раз обращу внимание - проявляется, если вписать приведенный мною код в событие Exit и ввести минуты с клавиатуры цифрами. Тогда при выходе из объекта введенное значение заменяется тем, что было до ввода, т.е. старым.
Не могу понять, в чем ошибка кода.
ЗЫ. С вашим кодом та же история - стирается старое значение :(
...
Рейтинг: 0 / 0
Стирается значение DTPicker (время) после редактирования с клавиатуры (не стрелками)
    #39332967
JustNick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если нет кода в событии Exit - нет ошибки, но и округления нет. Если есть код - значение затирается.

Но что не так с кодом? Все же просто!
Люди, помогите разобраться, а то приходится выкручиваться! Все эти выкрутасы некрасивы и неудобны :)
...
Рейтинг: 0 / 0
Стирается значение DTPicker (время) после редактирования с клавиатуры (не стрелками)
    #39333147
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JustNickЛюди, помогите разобратьсяКупи уже лотерейный билетПриложите тестовый файл с проблемой
...
Рейтинг: 0 / 0
Стирается значение DTPicker (время) после редактирования с клавиатуры (не стрелками)
    #39333644
JustNick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

спецом написано сложное приложение с красивой красной кнопкой. тестируйте на здоровье.
Надеюсь, получится файлик приложить... Еще не приходилось
...
Рейтинг: 0 / 0
Стирается значение DTPicker (время) после редактирования с клавиатуры (не стрелками)
    #39333953
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
М-да. Exit срабатывает раньше, чем изменится Value.

DoEvents перед чтением Value решает проблему
Либо обрабатывать не Exit, а Change (на up-down это событие не срабатывает, так что ничего страшного наверное)
...
Рейтинг: 0 / 0
Стирается значение DTPicker (время) после редактирования с клавиатуры (не стрелками)
    #39336578
JustNick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Долго я плясала вокруг этой проблемы. В итоге DoEvents тоже не помогло. Наставила костылей, теперь работает.

Всем спасибо!
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Стирается значение DTPicker (время) после редактирования с клавиатуры (не стрелками)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]