Страница: 1 | 2 |
Как это сделать?
Вообще-то, всё что ввели в текстовое поле будет иметь тип String.. Может тебе надо узнать что именно ввели - цифры или буквы? А то кто ж так вопрос задает.. isnumeric Так! Хватит! Зачем проверять что ввели, если можно просто ЗАПРЕТИТЬ ввод букв с клавиатуры!!! Private Sub Text1_KeyPress(KeyAscii As Integer) netracer , удачи тебе. Спасибо! И тебе удачи Спасибо! И тебе удачи Лучше так (ну гражданка вы тут наворотили ) Select Case KeyAscii 2 Cyrax Похоже фраза становится крылатой 2 Cветлана Мы ж комсомольцы - легких путей не ищем . Проверка на цифры делается один раз, а каждого нажатия N-раз даже если ввели все правильно, а знаешь сколько ресурсов и времени VB тратит на вызов одной процедуры? Лучше и не знать. Тут где то тесты сравнительные были, посмотри. В 90% процентах случаев для подобной проверки используется событие VALIDATE контрола. Оно происходит перед тем как контрол теряет фокус и дает возможность отменить перемещение фокуса . Private Sub Text1_Validate(Cancel As Boolean) В этом примере проверка проводится когда пользователь перемещает фокус и если в тексте присутствуют нежелательные символы(не цифры) то фокус остается в текстбоксе и выдается сообщение. Вообще конечно это должно решаться on case-by-case basis. Вполне допускаю что есть варианты когда необходимо именно ловить клавишу., но не в случае когда интересует именно конечный результат а не каждый отдельный символ. Или у вас другое мнение? . Поспорим? Светлана правильно советует. Для пользователя гораздо удобнее если часть его ошибок предотвратит разработчик. А проверка занимает ничтожное малое время по сравнению с чтением предупреждающего сообщения и повторным вводом данных. Я с такой задачей сталкивался не раз и не два. Запрещал прямой ввод в поле, все полностью обрабатывал через KeyPress, и ввод, и выделение, и вставку. На моем стареньком Р200 с 16М все работае ОК, про современные агрегаты и говорить не приходится. MAGNUS Блин! Умный какой! Зачем MsgBox еще писать в процедуре? Да пользователь загнется пока будет ОК на нем жать! Но это не столь важно.. И всёравно я свой код использовать буду! И ещё: никогда со смой не спорь! Я не люблю спорить... Магнус прав, но он отразил проблему "тяжёлого" кода лишь частично. 2 Cветлана Не обижайся на Магнуса. Это я его подначил 2 USA Для пользователя может и удобнее, сейчас, в данную секунду. И работает все нормально... В маленьком проекте. Пытались ли вы использовать подобную практику(стиль) в проектах где порядка 700-800К строк? В котором новый человек(не работавший с этим проэктом ранее) может разобраться минимум за месяц. Большая часть моего "ФЕ" - это именно предубеждение против лишней вызовов, использования ресурсов . Может у меня уже бзик по этому поводу. Но вот вам никогда не приходилось месяц рыскать по проэкту в поисках "чего бы еще оптимизировать?". Когда начинаешь даже на типах данны экономить что можешь, переносишь код процедур обратно в циклы чтоб сэкономить на вызовах, все перечислять нет смысла, я по поводу оптимизации уже научную работу могу писать, но думаю смысл вы ухватили. Я уже говорил: все решается в зависимости от конкретного случая, а так ... Каждый делает как хочет. Месседжбокс.... Я ведь его прикрутил просто для примера. И если это главный аргумент то пожалуйста: 1. На форму добавляем СтатусБар. 2.При возникновении ошибки кидаем сообщение на первую панель красным цветом. и Биип. Не отвергайте сразу. Просто попробуйте и скажите что думаете. 2 Светлана .... По поводу месаги см. выше, повторятся не люблю. Никто тебя не заставляет использовать чужой код. Я свою точку зрения никому не навязываю. А теперь позволю себе несколько замечаний... Просто наболело уже. 1. Мы где вообще находимся? на техническом форуме или на базаре? 2.Зачем мы все здесь? Чтобы самоутвердится? Доказать другим какие мы крутые и умные? Нет. Мы ВСЕ здесь учимся. Для кого то именно это важно, а кому то урок нужно повторять в течение недели. 3.Никого не пытаюсь оскорбить и никогда этим не страдал. У меня нет времени на эти глупости. Даи этот трактат в пишу первый и последний раз. 4."никогда со мной не спорь"- Вот это что за хрень? Опять базар? см. п1. Форум это место где люди обьедененные общими интересами обмениваются опытом, знаниями, задают повросы и пытаются сообща находить на них ответы. Ни о чем не говорит? Всем кто думает так же пора куда нить на Гала Чат. Там много детей с больным самолюбием. Подобная фраза звучит до ужаса глупо на техническом форуме, не находите? Свой путь работы в таких случаях я описал  разве что у меня это сделано через Err.Rise и ловится в отдельном классе для обработки ошибок), что с ним делать автору это его дело. А хочешь еще лучше? Можно на текстбокс повесить хук, и ловить сообщения, удаляя нежелательные. А можно еще из этого ActiveX контрол сделать, инкапсулирующий необходимые методы, а также расширить возможности задавая массив нежелательных символов или отдельные, или промежуток. А можно еще отдельный COM компонент, внешний сервер, передадимему хендл, он все и будет ловить, а нашему приложению вообще будет пофиг, т.к. как ты знаешь внешние сервера не влияют на работу проиложения. .... to MAGNUS: Я с тобой полностью согласна - мы здесь учимся. И может даже узнаем друг от друга больше, чем проходим в учебных заведениях. Ведь так хорошо что есть люди, которые тебе ответят да ещё и разными способами. MAGNUS, просто я не люблю когда когда говорят:"Поспорим?" Ну я и разозлилась...
Вопрос: Проверка типа данных, введённых в текстовое поле
Добавлено: 24.06.03 14:07
Автор вопроса: netracer | Web-сайт:
Ответы
Всего ответов: 18
Номер ответа: 1
Автор ответа:
Svetlana
ICQ: 262385618
Вопросов: 43
Ответов: 205
Профиль | | #1
Добавлено: 24.06.03 14:35
Номер ответа: 2
Автор ответа:
netracer
ICQ: 8575243
Вопросов: 7
Ответов: 36
Web-сайт:
Профиль | | #2
Добавлено: 24.06.03 15:08
Именно: если пользователь вводит буквы, нужно кинуть в него msgbox`ом, а есль цифры, то всё ОК
Номер ответа: 3
Автор ответа:
boevik
Хранитель чата
ICQ: 137392264
Вопросов: 8
Ответов: 557
Web-сайт:
Профиль | | #3
Добавлено: 24.06.03 15:18
Проверяй Text1_Change что ввели и действуй по ситуации.
Номер ответа: 4
Автор ответа:
Alex3
ICQ: 9481061
Вопросов: 18
Ответов: 132
Профиль | | #4
Добавлено: 24.06.03 15:18
Номер ответа: 5
Автор ответа:
Svetlana
ICQ: 262385618
Вопросов: 43
Ответов: 205
Профиль | | #5
Добавлено: 24.06.03 15:56
Dim s As String
s = "0123456789"
If KeyAscii > 26 Then
If InStr(s, Chr(KeyAscii)) = 0 Then
KeyAscii = 0
End If
End If
End Sub
Номер ответа: 6
Автор ответа:
netracer
ICQ: 8575243
Вопросов: 7
Ответов: 36
Web-сайт:
Профиль | | #6
Добавлено: 24.06.03 20:42
Номер ответа: 7
Автор ответа:
netracer
ICQ: 8575243
Вопросов: 7
Ответов: 36
Web-сайт:
Профиль | | #7
Добавлено: 24.06.03 20:42
Номер ответа: 8
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #8
Добавлено: 24.06.03 20:49
Case Asc("0") To Asc("9")
MsgBox "All Correct"
Case Else
KeyAscii = 0
End Select
Номер ответа: 9
Автор ответа:
MAGNUS
Вопросов: 12
Ответов: 430
Профиль | | #9
Добавлено: 25.06.03 02:16
If Not IsNumeric(text1) Then MsgBox "E-MOE !!!": Cancel = True
End Sub
Номер ответа: 10
Автор ответа:
USA
Вопросов: 1
Ответов: 184
Профиль | | #10
Добавлено: 25.06.03 06:06
Номер ответа: 11
Автор ответа:
Svetlana
ICQ: 262385618
Вопросов: 43
Ответов: 205
Профиль | | #11
Добавлено: 25.06.03 09:17
Номер ответа: 12
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #12
Добавлено: 25.06.03 16:55
На мой взгляд, кроме скорости выполнения, ещё важную роль играет "читабельность" кода.
Хотя не спорю - нестандартный подход, при правильном написании позволяет выигрывать несколько тактов .
Но в данном случае это не так.
Номер ответа: 13
Автор ответа:
MAGNUS
Вопросов: 12
Ответов: 430
Профиль | | #13
Добавлено: 25.06.03 17:26
Номер ответа: 14
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #14
Добавлено: 25.06.03 17:47
Ну ты загнул - ловушки ставить. Хотя может профи так и делают.
Номер ответа: 15
Автор ответа:
Svetlana
ICQ: 262385618
Вопросов: 43
Ответов: 205
Профиль | | #15
Добавлено: 25.06.03 19:16