Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 16:18 27.04.24 
Компютри и Интернет
   >> Visual Basic
Всички теми Следваща тема *Кратък преглед

Тема проверка на входящи даннинови  
Автор 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.

Просто не знам вече какво точно да направя. Целта е, ако се въведе нещо различно от положително число, да се изведе съобщение, да се оцвети фона за въвеждане и да не се продължи с изчисленията.



Тема Re: проверка на входящи даннинови [re: Sargonlll]  
Автор nepukis (минаващ)
Публикувано21.09.12 13:54



пробвай нещо от сорта. дори и да не тръгне на твоята версия експериментирай
On Error GoTo greda
if DTB.Text*1 >0 then
DTB.BackColor = Color.White
else
greda
end if


Exit Sub

greda:
MsgBox("Incorrect input data!", vbExclamation)
DTB.BackColor = Color.Red
Resume Next



Тема Re: проверка на входящи данни [re: nepukis]  
Автор Sargonlll ()
Публикувано24.09.12 12:58



Не съм особено обнадежден, но ще го пробвам, щом се почувствам по-свободен. Например към края на седмицата.



Тема Re: проверка на входящи даннинови [re: Sargonlll]  
Автор nedoga (непознат )
Публикувано24.10.12 21:08



За разлика от по-старите версии на VB, новите такива вече не позволяват неявно конвертиране на типове. Т.е. не може да се присвои текст директно на числова променлива, дори и да съдържа само цифри и обратното. Също така се получава грешка при конвентирането на текст в число, когато текста не представлява валидно число. Най-добре направи цикъл, който извлича отделните символи от текста и проверява дали са цифри, ",", "." "+", "-" или евентуално "E" ако числата са с плаваща запетая. Можеш да използваш функцията Asc() за да извлечеш ASCII кода на символа

. Нещо подобно на

Private Function CheckText(Text As String) As Boolean
Dim I As Long, N As Long, A As Long
N = Len(Text)
For I = 1 To N
A = Asc(Mid$(Text, I, 1))
If A < 43 Or A > 57 Or A = 47 Then
CheckText= False
Exit Function
End If
Next I
CheckText= True
End Function

Една такава проверка би могла дори да връща точно къде е грешката и дори да маркира некоректния символ в текстовото поле за да може потребителя лесно да го види и изтрие. Ето ти едно допълнително удобство.

Редактирано от nedoga на 24.10.12 21:09.




Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.