Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Запрет набора клавиш Добавлено: 14.03.09 21:27  

Автор вопроса:  Imperial Kashak | ICQ: 479713821 
Подскажите мне, пожалуйста, как запретить пользователю набирать ТЕКСТ. Т.е. надо, чтобы он в текстбоксе мог набирать только натуральные числа, а на остальные тот самый текстбокс не реагировал вообще никак.
Я пробовал перебор символов на событии Change, т.е. выдёргивал с помощью mid последний символ (и Right тоже) и сравнивал с массивом. Но он у меня глушил ВСЁ. И текст, и цифры.
Помогите, кто чем может! ))

Ответить

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

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



ICQ: 9968842 

Вопросов: 40
Ответов: 337
 Web-сайт: vkontakte.ru/id25563295 добавляйтесь в друзья))
 Профиль | | #1
Добавлено: 14.03.09 22:08
Незнаю что у меня получилось)писал на vb6
короче если ты введешь 1 то число введется если другое число или букву то нет
  1. Dim g(1) As String
  2. Private Sub Form_Load()
  3. g(0) = "1"
  4. End Sub
  5.  
  6. Private Sub Text1_Change()
  7. Dim tt As String
  8. Dim x As Long
  9. x = Len(Text1.Text)
  10. g(1) = Right(Text1.Text, 1)
  11. If Not g(0) = g(1) Then
  12. x = Len(Text1.Text)
  13. Text1.Text = Left(Text1.Text, x - 1)
  14. Else
  15. End If
  16. End Sub

Ответить

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



ICQ: 9968842 

Вопросов: 40
Ответов: 337
 Web-сайт: vkontakte.ru/id25563295 добавляйтесь в друзья))
 Профиль | | #2
Добавлено: 14.03.09 22:09
переменная tt не нужна забыл удалить))

Ответить

Номер ответа: 3
Автор ответа:
 Боцман



ICQ: 295725312 

Вопросов: 53
Ответов: 830
 Web-сайт: Rus-Skipper.narod.ru
 Профиль | | #3
Добавлено: 14.03.09 22:22
Приколись...
  1. Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
  2.  Const VK_BACK = &H8
  3.  Const KEYEVENTF_KEYUP = &H2
  4. Private Sub BACKSPACE()
  5. Call keybd_event(VK_BACK, 0, 0, 0) 'нажимаем BACKSPACE
  6. Call keybd_event(VK_BACK, 0, KEYEVENTF_KEYUP, 0) 'Отпускаем BACKSPACE
  7. End Sub
  8.  
  9. Private Sub Text1_Change()
  10. If Not IsNumeric(Text1) Then BACKSPACE
  11. End Sub

Ответить

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



ICQ: 9968842 

Вопросов: 40
Ответов: 337
 Web-сайт: vkontakte.ru/id25563295 добавляйтесь в друзья))
 Профиль | | #4
Добавлено: 14.03.09 22:22
:)

Ответить

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



Вопросов: 5
Ответов: 344
 Профиль | | #5 Добавлено: 15.03.09 06:50
  1. Private Sub TextBox1_Change()
  2. Dim I As Long
  3. For I = Len(TextBox1.Text) To 1 Step -1
  4.   Select Case Mid(TextBox1.Text, I, 1)
  5.   Case "0" To "9"
  6.   Case Else: TextBox1.Text = Replace(TextBox1.Text, Mid(TextBox1.Text, I, 1), "")
  7.   End Select
  8. Next I
  9. End Sub

Ответить

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



ICQ: 214-179-991 

Вопросов: 42
Ответов: 272
 Профиль | | #6 Добавлено: 15.03.09 11:19
Мне как то надо было, чтобы в текстовом поле можно было вводить только цифры - задал тоже на форуме. Вот, что мне предложили.
  1. Private Sub Txt1_KeyPress(KeyAscii As Integer)
  2. If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0
  3. End Sub

Ответить

Номер ответа: 7
Автор ответа:
 Боцман



ICQ: 295725312 

Вопросов: 53
Ответов: 830
 Web-сайт: Rus-Skipper.narod.ru
 Профиль | | #7
Добавлено: 15.03.09 11:32
Так вариантов много, но мой блокирует и меню, ведь могут просто вставить текст из буфера.

Ответить

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



Вопросов: 5
Ответов: 344
 Профиль | | #8 Добавлено: 15.03.09 12:05
Боцман пишет:
Так вариантов много, но мой блокирует и меню, ведь могут просто вставить текст из буфера.

А мой тоже и без всяких API.

Ответить

Номер ответа: 9
Автор ответа:
 Боцман



ICQ: 295725312 

Вопросов: 53
Ответов: 830
 Web-сайт: Rus-Skipper.narod.ru
 Профиль | | #9
Добавлено: 15.03.09 12:57
fAndOrIn пишет:
А мой тоже и без всяких API.

Я отвечал Aston, у тебя ведь в Change, запятой правда нет, с проверкой не вторая ли приведет к увеличению кода.
А в API невижу ничего плохого.
  1. Private Sub Form_Load()
  2.  
  3.     With MaskEdBox1
  4.  
  5.         .Mask = "#################"
  6.  
  7.         .PromptChar = " "
  8.  
  9.     End With
  10.  
  11. End Sub



  1. Private Sub Text1_KeyPress(KeyAscii As Integer)
  2.  
  3.     If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0
  4.  
  5. End Sub



  1. Private Sub Text1_KeyPress(KeyAscii As Integer)
  2.  
  3.     If KeyAscii < 48 Or KeyAscii > 57 Then
  4.  
  5.         MsgBox "Ввод тольк цифр 0 to 9 vbExclamation + vbOKOnly, "Input Error" <br> <br>
  6.         KeyAscii = 0
  7.  
  8.     End If
  9.  
  10. End Sub



  1. Private Sub Text1_KeyPress(KeyAscii As Integer)
  2.     ' допустите только один случай периода
  3.     If KeyAscii = 46 And InStr(Text1, ".") > 0 Then
  4.         KeyAscii = 0
  5.         Exit Sub
  6.         ' Теперь выполните
  7.     ElseIf (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> 46 Then
  8.         KeyAscii = 0
  9.     End If
  10. End Sub
хватит...

Ответить

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



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #10
Добавлено: 15.03.09 13:15
http://lmgtfy.com/?q=textbox+numeric+api
  1. Option Explicit
  2. Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
  3. Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  4. Private Const GWL_STYLE As Long = -16
  5. Private Const ES_NUMBER As Long = &H2000&
  6. Dim history As String
  7.  
  8. Private Sub Form_Load()
  9.     Dim ret As Long
  10.     ret = GetWindowLong(Text1.hwnd, GWL_STYLE)
  11.     ret = SetWindowLong(Text1.hwnd, GWL_STYLE, ret Or ES_NUMBER)
  12.     history = Text1.Text
  13. End Sub
  14.  
  15. Private Sub Text1_Change()
  16.     If Not IsNumeric(Text1.Text) Then Text1.Text = history Else history = Text1.Text
  17. End Sub


Запрет набора всего кроме цифр, еще добавил защиту от Paste.

Ответить

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



Вопросов: 5
Ответов: 344
 Профиль | | #11 Добавлено: 15.03.09 16:08
Боцман пишет:
запятой правда нет
А вообще то кто нибудь помнит сам вопрос
набирать только натуральные числа
И причем здесь запятая (десятичная точка) и соответственно - IsNumeric(который не скажет - является ли число натуральным)?

Ответить

Номер ответа: 12
Автор ответа:
 Imperial Kashak



ICQ: 479713821 

Вопросов: 10
Ответов: 57
 Профиль | | #12 Добавлено: 20.03.09 13:39
В моём случае APIшки не приветствуются )) Однако, на будущее сохраню!
А вот у fAndOrIn и Aston - буду пользовать! Благодарствую!
Из этих двух подчерпнул нового: забыл, что есть такая беда, как Replace, а также про Like - не знал, где да как использовать, но слышал.

Ответить

Страница: 1 |

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



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