Проверка корректности ввода времени в текстбокс

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Проверка корректности ввода времени в текстбокс

Сообщение Dummiel » 29.03.2007 (Чт) 15:21

Хай, други мои!

Вот как это правильно сделать? IsDate(txtBox.Text) ясно не подходит. Брать содержимое окна по Lost_Focus() и проверять типа Format(текстбокс, "hh:mm") - дает ошибки. FormatDateTime тоже чегой-то не идет. А что в БД вводить, если юзер ошибся, а поле в ней формата "дата"?

Что-то по поиску не сумел найти. GSerg как-то сказал, что не умеем искать... :oops: Видно, не научился.

С уважением - Dummiel

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 29.03.2007 (Чт) 15:26

А чем IsDate плох в Lost_Focus или где еще?
Весь мир матрица, а мы в нем потоки байтов!

Kostyan
Постоялец
Постоялец
 
Сообщения: 439
Зарегистрирован: 20.09.2002 (Пт) 4:14
Откуда: Россия, Уссурийск

Сообщение Kostyan » 29.03.2007 (Чт) 15:28

Используй Microsoft Masked Edit ActiveX
Нет ничего невозможного для человека с интеллектом.

Kostyan
Постоялец
Постоялец
 
Сообщения: 439
Зарегистрирован: 20.09.2002 (Пт) 4:14
Откуда: Россия, Уссурийск

Сообщение Kostyan » 29.03.2007 (Чт) 15:32

!Viper! писал(а):А чем IsDate плох в Lost_Focus или где еще?

IsDate возвращает True когда вводишь не только время, но и дату, причем в любом доступном формате.
Т.е. если введут 22:10 - вернет True,
22-10 - True
22.10 - True
22/10 - True
22/10.00 - true

И что именно ввел пользователь, не понятно.
Нет ничего невозможного для человека с интеллектом.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.03.2007 (Чт) 16:37

Dummiel, программирование - это когда из кирпичиков собирается целое. В процессе поисков подходящих кирпичиков используется моск (алб. мозг). Так эффективнее.
Моск подсказывает, что есть оператор like, который тебе должен быть известен. like "##:##" - нет? А почему нет? А по-моему да. Осталось только, в случае успеха с like, проверить, чтобы то, что до двоеточия, было от 00 до 23, а после - от 00 до 59.
Хорошо, ты не знаешь про Like. Но ты знаешь про len, которым можно проверить, что длина строки равна 5, про instr, которым можно найти в ней двоеточие и убедиться, что оно на позиции 3 - или про mid, которым можно сразу посмотреть, не равен ли символ 3 двоеточию? Про left и right, которыми можно взять две первые и две последние цифры и посмотреть, цифры ли это, функцией isnumber? С последующей проверкой на диапазон значений?
А ты вместо этого применяешь прямо обратные функции форматирования в строку, а не из неё - почему?.. Это же не тонкости, а совсем наоборот. А ты занимаешься VB давно.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 29.03.2007 (Чт) 17:50

Дык эта:

Код: Выделить всё
d Like "[0-2]#:[0-6]#" or d Like "#:[0-6]#"
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 29.03.2007 (Чт) 17:55

ага, 25:61
Изображение

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 29.03.2007 (Чт) 18:10

tyomitch писал(а):ага, 25:61


Все бы придираться:

Код: Выделить всё
d Like "[0-1]#:[0-5]#" or d Like "#:[0-5]#" or d Like "2[0-3]:[0-5]#"


:lol:
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Сообщение Dummiel » 30.03.2007 (Пт) 19:52

Люди, никто GSerg'а прибить не пробовал? :) Прям руки чешутся! Или у него лично ко мне что-то есть? Другим вроде без яда отвечает!

В и-нете копался, контрол нашел. Интересный, кстати. И как раз, то что нужно, и все яды GSerg'а в нем реализованы.
Вложения
datetime.rar
(3.39 Кб) Скачиваний: 61

Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Сообщение Dummiel » 30.03.2007 (Пт) 19:55

Кстати, GSerg! Для интереса почитай мои самые первые вопросы по VB. По сравнению с ними сложность моих запросов намного выросла! :)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 30.03.2007 (Пт) 20:25

Dummiel писал(а):Или у него лично ко мне что-то есть?

Не к тебе, а к вопросам, на которых можно смело ставить печать "Не думал".

Dummiel писал(а):Другим вроде без яда отвечает!

Зависит от вопроса.

Dummiel писал(а):В и-нете копался, контрол нашел. Интересный, кстати.

Стандартный контрол DTPicker не нашёл?..
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 30.03.2007 (Пт) 21:15

GSerg писал(а):Стандартный контрол DTPicker не нашёл?..


А это глюкавая бяка. К тому же ему время нужно, а не дата.

Конечно, самому под время контрол сделать совсем просто...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 30.03.2007 (Пт) 21:29

Andrey Fedorov писал(а):А это глюкавая бяка.

Обоснуйте (ц)

Andrey Fedorov писал(а):К тому же ему время нужно, а не дата.

Задав проперть .Format=dtpTime, мы начинаем мочь вводить туда время.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 30.03.2007 (Пт) 21:48

GSerg писал(а):Обоснуйте (ц)


Свойство DataChanged у него не работает.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 30.03.2007 (Пт) 22:14

Возможно; в качестве привязанного его не употреблял.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 30.03.2007 (Пт) 22:20

GSerg писал(а):Возможно; в качестве привязанного его не употреблял.


В качестве привязанных и я не употребляю, тем не менее это свойство использую у всех контролов.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 30.03.2007 (Пт) 22:35

Andrey Fedorov писал(а):Свойство DataChanged у него не работает.

В смысле просто Change? Если оно, то вроде работает :roll:
Может это раньше глючило до последнего шестого сервиспака?

Хотя в проекте под заказ я использовал NeoCalendar -- он посимпатичнее будет и дает возможность указать, что никакая дата не выбрана (при работе с БД бывает нужно).

AndreyFedorov, а какой контрол ты используешь?
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 30.03.2007 (Пт) 22:38

VVitafresh, есть разница между свойством и событием.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 30.03.2007 (Пт) 22:39

GSerg писал(а):VVitafresh, есть разница между свойством и событием.

Сорри, перепутал :oops:
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Сообщение Dummiel » 31.03.2007 (Сб) 8:22

GSerg писал(а):
Dummiel писал(а):Или у него лично ко мне что-то есть?

Не к тебе, а к вопросам, на которых можно смело ставить печать "Не думал".

Dummiel писал(а):Другим вроде без яда отвечает!

Зависит от вопроса.

Dummiel писал(а):В и-нете копался, контрол нашел. Интересный, кстати.

Стандартный контрол DTPicker не нашёл?..


Уел! :) Ну по всем параметрам - УЕЛ! :lol:

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

2. Без ответа.

3. Честно - не искал, даже не знал, что такой есть. Скинь ссылочку, please!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 31.03.2007 (Сб) 10:53

Как скинуть ссылочку на стандартный контрол? :roll:
Ctrl+T, Microsoft Windows Common Controls-2.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 31.03.2007 (Сб) 13:48

VVitafresh писал(а):а какой контрол ты используешь?


Самописный, но не мой а конторы с которой когда-то работал. Так как добра на раздачу от них не было, то отдать его не могу...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Сообщение Dummiel » 01.04.2007 (Вс) 18:30

GSerg писал(а):Как скинуть ссылочку на стандартный контрол? :roll:
Ctrl+T, Microsoft Windows Common Controls-2.


:oops: :oops: :oops:


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 43

    TopList