Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на Basic / VBA


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты в разделе

Sergey V. Gornostaev
Статус: Профессионал
Рейтинг: 98
∙ повысить рейтинг »
Gluck
Статус: 2-й класс
Рейтинг: 73
∙ повысить рейтинг »
solowey
Статус: Профессионал
Рейтинг: 57
∙ повысить рейтинг »

∙ Basic

Номер выпуска:1146
Дата выхода:21.08.2020, 12:45
Администратор рассылки:Андреенков Владимир (Академик)
Подписчиков / экспертов:15 / 13
Вопросов / ответов:3 / 10

Консультация # 133777: Здраствуйте!...Помогите построить график в графическом режиме y=arctg 4x [0..3] и с шагом 0,15....
Консультация # 120717: Добрый день! Помогите решить проблему. Написал простенькую программку на VB6, типо калькулятор - в текстовое поле вводим цыфры, нажимаем кнопочку и все считает. Проблема: если вдруг вводят не цыфры, а буквы тутже вылетает ошибка и программка закрывается. Я понимаю проблема в обработке различных типов данных. Подскажите как избежать ошибки....
Консультация # 20915: Что нужно сделать, чтобы при переключении табов в TabStip изменялись обьекты на листе (например label1 гасла, а появлялась label2), вообщем совершались какие-либо действия...

Консультация # 133777:

Здраствуйте!...Помогите построить график в графическом режиме
y=arctg 4x [0..3] и с шагом 0,15.

Дата отправки: 23.04.2008, 15:11
Вопрос задал: Китаев Кирилл Артурович
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Черников Игорь Владимирович:

Здравствуйте, Китаев Кирилл Артурович!
Вот Ваша программа, как Вы просили
Удачи!

Приложение:

Консультировал: Черников Игорь Владимирович
Дата отправки: 23.04.2008, 18:38
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 120717:

Добрый день! Помогите решить проблему. Написал простенькую программку на VB6, типо калькулятор - в текстовое поле вводим цыфры, нажимаем кнопочку и все считает. Проблема: если вдруг вводят не цыфры, а буквы тутже вылетает ошибка и программка закрывается. Я понимаю проблема в обработке различных типов данных. Подскажите как избежать ошибки.

Дата отправки: 29.01.2008, 17:32
Вопрос задал: CLov233
Всего ответов: 7
Страница онлайн-консультации »


Консультирует AlexanderZh:

Здравствуйте, CLov233!
Очевидно нужно проверять вводимые данные smile
Метод проверки зависит от того, как организуется ввод. Можно проверять каждый символ в событии "нажание кнопки" и если он не соответствует критерию (не является цифрой, точкой или математическим знаком) то запрещать его ввод.
Можно проверять значение поля на "правильность" уже после ввода всего числа. Или встроить такую проверку перед выполненинем математических действий.
Очень жалко, что вы не привели кода программы...

Консультировал: AlexanderZh
Дата отправки: 29.01.2008, 17:48
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Максим Sly:

Здравствуйте, CLov233!
попробуйте воспользоваться процедурой обработки нажатия клавиши, приведенной ниже...
должно помочь.. этот код позволяет нажимать клавиши с цифрами, и клавиши для удаления этих цифр т.е. Back Spase или Delete...
если же нажата какая либо другая клавиша, то она игнорируется.

Приложение:

Консультировал: Максим Sly
Дата отправки: 29.01.2008, 17:49
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует KunkTator:

Здравствуйте, CLov233!
Если свойство CauseValidate у Text1 существует (в Вашей версии VB) и установленно в TRUE, то
Private Sub Text1_Validate(Cancel As Boolean)
If Not IsNumeric(Text1.Text) Then
MsgBox "Please enter numbers only.", vbInformation
\'можно протереть
Text1.Text = ""
Cancel = True
End If
End Sub

Консультировал: KunkTator
Дата отправки: 29.01.2008, 18:58
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Тесленко Евгений Алексеевич:

Здравствуйте, CLov233!
В дополнение к сказанному AlexanderZh и Максим Sly.
значение поля на "правильность" проверяется проверяется примерно так:
If Not IsNumeric(Text1.Text) Then Exit Sub
А при проверке ввода при нажантии клавиши, необходимо проверять код разделителя целой и дробной части. запятая или точка, код 44 или 46, в зависимости от национальной настройки. Иначе математические операции с нецелыми числами будут невозможны.
Евгений.

Консультировал: Тесленко Евгений Алексеевич
Дата отправки: 29.01.2008, 19:19
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует DrakoN:

Здравствуйте, CLov233!
дополним ответ последнего експерта)

код проверки считалки

Try
здесь считаем
Catch ex as Exception
MsgBox("введены невреные данные")
end try
код проверки числа

после нажатия кнопки любого действия
try
Cdbl(TextBox.Text)
catch ex as Exception
MsgBox("плохие данные")
end try

И именно дабл так как Операции IsNumeric запретят вводить запятую и прочие мат знаки вообщем плохая это затея

Консультировал: DrakoN
Дата отправки: 29.01.2008, 23:17
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует HookEst:

Здравствуйте, CLov233!
Ответов много, добавлю свой.
Вариантов решения несколько.
Можно просто наплевать на то, что ввел пользователь, а перед использованием, значение поля "прогнать" через Val (не забывая, что Val принимает только (.) как разделитель):

Private Sub Command1_Click()
MsgBox Val(Replace(Text1, ",", "."))
End Sub

Можно просто информировать об ошибке и все.
Эти варианты не очень уважительно относятся к пользователю.

Есть неплохой, очень эффективный вариант, вообще запретить фокус ввода для поля, а весь ввод обрабатывать в обработчиках формы(KeyPreview=True), так сделано в калькуляторе Windows(calc.exe).
что-нибудь вроде:

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Dim t As String
Dim dec As String
t = Val(Text1)
dec = IIf(Right(Text1, 1) = ".", ".", "")
Select Case KeyCode
Case vbKey0 To vbKey9
t = t & dec & Chr(KeyCode)
Case vbKeyNumpad0 To vbKeyNumpad9
t = t & dec & Chr(KeyCode - 48)
Case vbKeyDelete
t = ""
Case vbKeyBack
If dec = "." Then
dec = ""
Else
t = Left(t, Len(t) - 1)
End If
End Select
Text1 = Val(t)

If KeyCode = vbKeyDecimal Then If dec = "" Then Text1 = Val(t) & "."
End Sub

таким образом, можно делать проверки любой сложности, перехватывать буфер обмена и т.д. и т.п.
этот вариант - мощный, но достаточно сложный для реализации.

Варианты попроще, те что уже озвучили, это проверять ввод в обработчиках поля.

OnKeyPress - очень удобный, простой, но не учитывает то, что из буфера обмена, значени можно вставлять не только нажимая Ctrl+V, а например с помощью мыши. В таком случае, данный вариант не сработает.

OnValidate - также удобный для нас, но проверка ввода происходит только в момент потери фокуса поля, что не очень удобно для пользователя.

OnChange - этот вариант еще не озвучили, но мне он нравится больше всего:

Private Sub Text1_Change()
Static OldVal As String
Dim ss As Long
Dim sl As Long
If Trim(Text1) = "" Then OldVal = "": Text1 = "": Exit Sub
If Not IsNumeric(Text1) Then
With Text1
ss = .SelStart
sl = .SelLength
.Text = OldVal
.SelStart = ss - 1
.SelLength = sl
End With
Else
OldVal = Text1
End If
End Sub

просто, удобно, не зависит от способа изменения данных, мне нравится.

Все эти способы можно комбинировать.
Вообщем, что хотел - сказал.
Успехов.

Консультировал: HookEst
Дата отправки: 30.01.2008, 06:56
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Черников Игорь Владимирович:

Здравствуйте, CLov233!
Private Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 8, 44, 46, 48 To 57 \'При вводе десятичных цифр (48-57) Вам понадобится точка (46) или запятая (44) - ненужное уберите
Case 13 \'Код клавиши Enter
\' здесь можно вставить код вычисления
Case Else
KeyAscii = 0
End Select
End Sub

Консультировал: Черников Игорь Владимирович
Дата отправки: 30.01.2008, 17:58
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 20915:

Что нужно сделать, чтобы при переключении табов в TabStip изменялись обьекты на листе (например label1 гасла, а появлялась label2), вообщем совершались какие-либо действия

Дата отправки: 15.05.2005, 21:17
Вопрос задал: scrolt
Всего ответов: 2
Страница онлайн-консультации »


Консультирует DSota:

Здравствуйте, scrolt!
Запиши свои действия в процедуру (event) TabStrip_OnChange

Консультировал: DSota
Дата отправки: 16.05.2005, 08:43
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Александр Шевченко:

Здравствуйте, scrolt!
Вот пример от Майкрософта. Лежит в стандартных шаблонах форм под названием "Options Dialog".

Приложение:

Консультировал: Александр Шевченко
Дата отправки: 16.05.2005, 14:57
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное