|
Тема |
проверка на входящи данни |
|
Автор |
Sargonlll () |
|
Публикувано | 12.09.12 13:11 |
|
|
Направих си една програма, която ми върши отлична работа. Сега се опитвам да я облагородя малко. Искам да вградя проверка за коректност на входящите данни. Повечето от тях трябва да са положителни числа. Използвам VB 2008 Express Edition, който незнайно защо е с изключително орязан вътрешен хелп.
Данните се извличат от текстови полета, напр. DTB.Text. Забелязва се, че букви и др. подобни се възприемат като 0, а ако има число с някаква буква след него, се възприема само числото. Направих няколко проби, но все още не съм доволен от резултата. Това е базовия код за проверка:
If Val(DTB.Text) <> DTB.Text Or Val(DTB.Text) <= 0 Then
MsgBox("Incorrect input data!", vbExclamation)
DTB.BackColor = Color.Red
Exit Sub
Else
DTB.BackColor = Color.White
End If
Така получавам съобщение за грешка в първия ред при въвеждане на буква (вместо цифра): Conversion from string "i" to type 'Double" is not valid. Добре, това е разбираемо. Но, след като не желае да преобразува буквите в число, защо без проверка ги възприема за 0 и програмата смята с тях (вместо още тогава да даде грешка).
Друг вариант, който опитах, е (промяна на само първия ред):
If Str(Val(DTB.Text)) <> DTB.Text Or Val(DTB.Text) <= 0 Then
Логиката беше, че след преобразуване на буква в число, тя ще се превърне в 0, после в стринг "0". Който вече ще е различен от първоначалната буква, напр. "I". Но, започна да излиза съобщение за некоректност, независимо какво въвеждам...
Накрая, опитах и (промяна на сомо първия ред):
If Str(Val(DTB.Text)) <> Str(DTB.Text) Or Val(DTB.Text) <= 0 Then
Получих съобщение за грешка: Argument 'Number' cannot be converted to a numeric value.
Просто не знам вече какво точно да направя. Целта е, ако се въведе нещо различно от положително число, да се изведе съобщение, да се оцвети фона за въвеждане и да не се продължи с изчисленията.
|
| |
|
|
|