В VB нужно сделать запрет на ввод любых данных , кроме чисел. До этого пользовался IsNumeric. А сейчас не подходит, так как эта функция блокирует дробные числа, разделенные точкой, считая их не цифрой. А у меня в проекте для удобства пользователей дробные можно вводить с точкой или с запятой. Заранее спасибо!
В VB нужно сделать запрет на ввод любых данных , кроме чисел. До этого пользовался IsNumeric. А сейчас не подходит, так как эта функция блокирует дробные числа, разделенные точкой, считая их не цифрой. А у меня в проекте для удобства пользователей дробные можно вводить с точкой или с запятой. Заранее спасибо!vdekameron
Саня, vdekameron, в следующий раз, (если не задумываетесь), получите аналогичное. (Или ничего) [vba]
Код
Private Sub ВерхнийБ_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case 48 To 57: KeyAscii = KeyAscii Case 46, 44: KeyAscii = 46 Case Else: KeyAscii = 0 End Select End Sub
[/vba]
Саня, vdekameron, в следующий раз, (если не задумываетесь), получите аналогичное. (Или ничего) [vba]
Код
Private Sub ВерхнийБ_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case 48 To 57: KeyAscii = KeyAscii Case 46, 44: KeyAscii = 46 Case Else: KeyAscii = 0 End Select End Sub
Саня, Интересный очень вариант. Но есть один недочет. Как быть если записал число 12345 а потом стереть его хочешь а цифру 1 не получается стереть Она возвращается каждый раз после [vba]
Код
mbExitEvent = True Text1.Text = msText
[/vba]
[moder]потому что 1 - это священное число
поправил вверху[/moder]
Саня, Интересный очень вариант. Но есть один недочет. Как быть если записал число 12345 а потом стереть его хочешь а цифру 1 не получается стереть Она возвращается каждый раз после [vba]
Точно))) 1- святое число))) Теперь ввожу 12345, стираю и когда ввожу не число а например букву "р" то вуаля, появляется еденичка
[moder]поправил вверху это финальная версия от меня. Все дополнительные "нюансы" исправляй уже сам (думаю, это не сложно будет, если разберешься с уже написанным)[/moder]
Точно))) 1- святое число))) Теперь ввожу 12345, стираю и когда ввожу не число а например букву "р" то вуаля, появляется еденичка
[moder]поправил вверху это финальная версия от меня. Все дополнительные "нюансы" исправляй уже сам (думаю, это не сложно будет, если разберешься с уже написанным)[/moder]vdekameron
Саня, Закинул уже в свой проект ваш код. Тестирую. Все бы ничего, но только еще один маленький косяк нашел. Конечно он никак не влияет на результат, но все же. В текстовое поле можно ввести знак "+" и "-" после цифр ( до цифр нельзя но мне и не нужно, значения там не могут быть отрицат. это только на руку) Если есть время напишите пожалуйста дополнение к коду. Если это конечно можно сделать. Заранее спасибо
Саня, Закинул уже в свой проект ваш код. Тестирую. Все бы ничего, но только еще один маленький косяк нашел. Конечно он никак не влияет на результат, но все же. В текстовое поле можно ввести знак "+" и "-" после цифр ( до цифр нельзя но мне и не нужно, значения там не могут быть отрицат. это только на руку) Если есть время напишите пожалуйста дополнение к коду. Если это конечно можно сделать. Заранее спасибоvdekameron
Саня, Помудился сам. Вот как у меня получилось)) Может это я сделал через одно место) Но главное ведь результат. И заодно я сделал так, чтобы после того как ввел число и переместил курсор в начало числа нельзя было тоже "+" или "-" влупить Только если можно посмотрите, может у вас замечание есть какие-то и я что-то не учел. Но проверял, работает.[vba]
Код
Option Explicit Private Vihod As Boolean Dim P1 As String, P2 As String Dim KolS As Integer Dim Simvol As String
Private Sub Text1_Change() If Vihod Then Exit Sub ' зацикливание
Dim Val1 As String, Val2 As Double Val1 = Text1.Text If Len(Val1) = 0 Then P1 = "" Exit Sub End If
Val1 = Replace(Val1, ".", ",") Select Case True Case Val1 Like ",*": Val1 = "0" & Val1 Case Val1 Like "*,": Val1 = Val1 & "0" End Select
If IsNumeric(Val1) Then P1 = Text1.Text KolS = Len(P1) Simvol = Mid(P1, KolS, 1) Select Case Simvol Case "+": P1 = Replace(P1, Simvol, ""): Text1.Text = P1 Case "-": P1 = Replace(P1, Simvol, ""): Text1.Text = P1 End Select Simvol = Mid(P1, 1, 1) Select Case Simvol Case "+": P1 = Replace(P1, Simvol, ""): Text1.Text = P1 Case "-": P1 = Replace(P1, Simvol, ""): Text1.Text = P1 End Select Else Vihod = True
Саня, Помудился сам. Вот как у меня получилось)) Может это я сделал через одно место) Но главное ведь результат. И заодно я сделал так, чтобы после того как ввел число и переместил курсор в начало числа нельзя было тоже "+" или "-" влупить Только если можно посмотрите, может у вас замечание есть какие-то и я что-то не учел. Но проверял, работает.[vba]
Код
Option Explicit Private Vihod As Boolean Dim P1 As String, P2 As String Dim KolS As Integer Dim Simvol As String
Private Sub Text1_Change() If Vihod Then Exit Sub ' зацикливание
Dim Val1 As String, Val2 As Double Val1 = Text1.Text If Len(Val1) = 0 Then P1 = "" Exit Sub End If
Val1 = Replace(Val1, ".", ",") Select Case True Case Val1 Like ",*": Val1 = "0" & Val1 Case Val1 Like "*,": Val1 = Val1 & "0" End Select
If IsNumeric(Val1) Then P1 = Text1.Text KolS = Len(P1) Simvol = Mid(P1, KolS, 1) Select Case Simvol Case "+": P1 = Replace(P1, Simvol, ""): Text1.Text = P1 Case "-": P1 = Replace(P1, Simvol, ""): Text1.Text = P1 End Select Simvol = Mid(P1, 1, 1) Select Case Simvol Case "+": P1 = Replace(P1, Simvol, ""): Text1.Text = P1 Case "-": P1 = Replace(P1, Simvol, ""): Text1.Text = P1 End Select Else Vihod = True