Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Проверка типа данных, введённых в текстовое поле Добавлено: 24.06.03 14:07  

Автор вопроса:  netracer | Web-сайт: netracer.h11.ru | ICQ: 8575243 

Как это сделать?

Ответить

  Ответы Всего ответов: 18  

Номер ответа: 1
Автор ответа:
 Svetlana



ICQ: 262385618 

Вопросов: 43
Ответов: 205
 Профиль | | #1 Добавлено: 24.06.03 14:35

Вообще-то, всё что ввели в текстовое поле будет иметь тип String.. Может тебе надо узнать что именно ввели - цифры или буквы?   А то кто ж так вопрос задает..

Ответить

Номер ответа: 2
Автор ответа:
 netracer



ICQ: 8575243 

Вопросов: 7
Ответов: 36
 Web-сайт: netracer.h11.ru
 Профиль | | #2
Добавлено: 24.06.03 15:08
Именно: если пользователь вводит буквы, нужно кинуть в него msgbox`ом, а есль цифры, то всё ОК

Ответить

Номер ответа: 3
Автор ответа:
 boevik



Хранитель чата

ICQ: 137392264 

Вопросов: 8
Ответов: 557
 Web-сайт: www.hypertech.ru
 Профиль | | #3
Добавлено: 24.06.03 15:18
Проверяй Text1_Change что ввели и действуй по ситуации.

Ответить

Номер ответа: 4
Автор ответа:
 Alex3



ICQ: 9481061 

Вопросов: 18
Ответов: 132
 Профиль | | #4 Добавлено: 24.06.03 15:18

isnumeric

Ответить

Номер ответа: 5
Автор ответа:
 Svetlana



ICQ: 262385618 

Вопросов: 43
Ответов: 205
 Профиль | | #5 Добавлено: 24.06.03 15:56

Так! Хватит! Зачем проверять что ввели, если можно просто ЗАПРЕТИТЬ ввод букв с клавиатуры!!!

Private Sub Text1_KeyPress(KeyAscii As Integer)
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

netracer , удачи тебе.

Ответить

Номер ответа: 6
Автор ответа:
 netracer



ICQ: 8575243 

Вопросов: 7
Ответов: 36
 Web-сайт: netracer.h11.ru
 Профиль | | #6
Добавлено: 24.06.03 20:42

Спасибо! И тебе удачи :)

Ответить

Номер ответа: 7
Автор ответа:
 netracer



ICQ: 8575243 

Вопросов: 7
Ответов: 36
 Web-сайт: netracer.h11.ru
 Профиль | | #7
Добавлено: 24.06.03 20:42

Спасибо! И тебе удачи :)

Ответить

Номер ответа: 8
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #8
Добавлено: 24.06.03 20:49

Лучше так (ну гражданка вы тут наворотили :-))

Select Case KeyAscii
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

2 Cyrax

Похоже фраза становится крылатой :)

2 Cветлана

:) Мы ж комсомольцы - легких путей не ищем :).

Проверка на цифры делается один раз, а каждого нажатия N-раз даже если ввели все правильно, а знаешь сколько ресурсов и времени VB тратит на вызов одной процедуры? Лучше и не знать. Тут где то тесты сравнительные были, посмотри.

В 90% процентах случаев для подобной проверки используется событие VALIDATE контрола. Оно происходит перед тем как контрол теряет фокус и дает возможность отменить перемещение фокуса .

Private Sub Text1_Validate(Cancel As Boolean)
   If Not IsNumeric(text1) Then MsgBox "E-MOE !!!": Cancel = True
End Sub

В этом примере проверка проводится когда пользователь перемещает фокус и если в тексте присутствуют нежелательные символы(не цифры) то фокус остается в текстбоксе и выдается сообщение.

Вообще конечно это должно решаться on case-by-case basis. Вполне допускаю что есть варианты когда необходимо именно ловить клавишу., но не в случае когда интересует именно конечный результат а не каждый отдельный символ.

Или у вас другое мнение? :). Поспорим?

 

Ответить

Номер ответа: 10
Автор ответа:
 USA



Вопросов: 1
Ответов: 184
 Профиль | | #10 Добавлено: 25.06.03 06:06

Светлана правильно советует. Для пользователя гораздо удобнее если часть его ошибок предотвратит разработчик. А проверка занимает ничтожное малое время по сравнению с чтением предупреждающего сообщения и повторным вводом данных.

Я с такой задачей сталкивался не раз и не два. Запрещал прямой ввод в поле, все полностью обрабатывал через KeyPress, и ввод, и выделение, и вставку. На моем стареньком Р200 с 16М все работае ОК, про современные агрегаты и говорить не приходится.

Ответить

Номер ответа: 11
Автор ответа:
 Svetlana



ICQ: 262385618 

Вопросов: 43
Ответов: 205
 Профиль | | #11 Добавлено: 25.06.03 09:17

MAGNUS   Блин! Умный какой! Зачем MsgBox еще писать в процедуре? Да пользователь загнется пока будет ОК на нем жать!

Но это не столь важно.. И всёравно я свой код использовать буду!

 И ещё: никогда со смой не спорь! Я не люблю спорить...

 

Ответить

Номер ответа: 12
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #12
Добавлено: 25.06.03 16:55

Магнус прав, но он отразил проблему "тяжёлого" кода лишь частично.
На мой взгляд, кроме скорости выполнения, ещё важную роль играет "читабельность" кода.
Хотя не спорю - нестандартный подход, при правильном написании позволяет выигрывать несколько тактов :).
Но в данном случае это не так.

2 Cветлана

Не обижайся на Магнуса. Это я его подначил :)

Ответить

Номер ответа: 13
Автор ответа:
 MAGNUS



Вопросов: 12
Ответов: 430
 Профиль | | #13 Добавлено: 25.06.03 17:26

2 USA

Для пользователя может и удобнее, сейчас, в данную секунду. И работает все нормально... В маленьком проекте. Пытались ли вы использовать подобную практику(стиль) в проектах где порядка 700-800К строк? В котором новый человек(не работавший с этим проэктом ранее) может разобраться минимум за месяц. Большая часть моего "ФЕ" - это именно предубеждение против лишней вызовов, использования ресурсов . Может у меня уже бзик по этому поводу. Но вот вам никогда не приходилось месяц рыскать по проэкту в поисках "чего бы еще оптимизировать?". Когда начинаешь даже на типах данны экономить что можешь, переносишь код процедур обратно в циклы чтоб сэкономить на вызовах, все перечислять нет смысла, я по поводу оптимизации уже научную работу могу писать, но думаю смысл вы ухватили.

Я уже говорил: все решается в зависимости от конкретного случая, а так ... Каждый делает как хочет.

Месседжбокс.... Я ведь его прикрутил просто для примера. И если это главный аргумент то пожалуйста:

1. На форму добавляем СтатусБар.

2.При возникновении ошибки кидаем сообщение на первую панель красным цветом. и Биип.

Не отвергайте сразу. Просто попробуйте и скажите что думаете.

 

2 Светлана ....

По поводу месаги см. выше, повторятся не люблю.

Никто тебя не заставляет использовать чужой код. Я свою точку зрения никому не навязываю.

А теперь позволю себе несколько замечаний... Просто наболело уже.

1. Мы где вообще находимся? на техническом форуме или на базаре?

2.Зачем мы все здесь? Чтобы самоутвердится? Доказать другим какие мы крутые и умные? Нет. Мы ВСЕ здесь учимся. Для кого то именно это важно, а кому то урок нужно повторять в течение недели.

3.Никого не пытаюсь оскорбить и никогда этим не страдал. У меня нет времени на эти глупости. Даи этот трактат в пишу первый и последний раз.

4."никогда со мной не спорь"- Вот это что за хрень? Опять базар? см. п1.  Форум это место где люди обьедененные общими интересами обмениваются опытом, знаниями, задают повросы и пытаются сообща находить на них ответы. Ни о чем не говорит? Всем кто думает так же пора куда нить на Гала Чат. Там много детей с больным самолюбием. Подобная фраза звучит до ужаса глупо на техническом форуме, не находите?

Свой путь работы в таких случаях я описал ;( разве что у меня это сделано через Err.Rise и ловится в отдельном классе для обработки ошибок), что с ним делать автору это его дело.

А хочешь еще лучше? Можно на текстбокс повесить хук, и ловить сообщения, удаляя нежелательные. А можно еще из этого ActiveX контрол сделать, инкапсулирующий необходимые методы, а также расширить возможности задавая массив нежелательных символов или отдельные, или промежуток. А можно еще отдельный COM компонент, внешний сервер, передадимему хендл, он все и будет ловить, а нашему приложению вообще будет пофиг, т.к. как ты знаешь внешние сервера не влияют на работу проиложения.

....

 

 

 

Ответить

Номер ответа: 14
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #14
Добавлено: 25.06.03 17:47
Ну ты загнул - ловушки ставить. Хотя может профи так и делают.

Ответить

Номер ответа: 15
Автор ответа:
 Svetlana



ICQ: 262385618 

Вопросов: 43
Ответов: 205
 Профиль | | #15 Добавлено: 25.06.03 19:16

to MAGNUS:

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

MAGNUS, просто я не люблю когда когда говорят:"Поспорим?" Ну я и разозлилась...

 

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам