Ввод только цифр

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Ввод только цифр

Сообщение Чудик » 06.03.2005 (Вс) 19:43

Как определить, что в TextBox введены только цифры?
Век живи - век учись!
www.detal-plast.narod.ru

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 06.03.2005 (Вс) 19:47

Код: Выделить всё
Private Sub Text1_KeyPress(KeyAscii As Integer)
If InStr(1, "1234567890.", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub


Только надо обрабатывать ещё нажатия BackSpace и Delete... Это - задание на дом ;)

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 06.03.2005 (Вс) 20:29

Благодарю!
Век живи - век учись!
www.detal-plast.narod.ru

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 06.03.2005 (Вс) 20:56

Можно так:
Код: Выделить всё
Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case Asc("0") To Asc("9"), Asc("."), vbKeyBack, vbKeyDelete
Case Else
KeyAscii = 0
End Select
End Sub

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 06.03.2005 (Вс) 21:11

Кстати, надо ещё учесть, что в разных странах разные разделители целой и дробной частей числа. Надо вытаскивать данные о текущем разделителе. Где найти, как вытащить, - не знаю ;). Спроси у Яндекса.

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 06.03.2005 (Вс) 21:37

Код: Выделить всё
Option Explicit

Private Const LOCALE_SDECIMAL As Long = &HE&
Private Const LOCALE_USER_DEFAULT As Long = &H400&

Private Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long

Private Function GetSeparator$()
Dim Buf$, Ret&
Buf = String$(256, 0)
GetSeparator = Left$(Buf, GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, Buf, Len(Buf)))
End Sub

Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case Asc("0") To Asc("9"), Asc(GetSeparator), vbKeyBack, vbKeyDelete
Case Else
KeyAscii = 0
End Select
End Sub
Я спросил у Яндекса, я спросил у Рамблера, я спросил... Нет, только MSDN остается :)

ism
Постоялец
Постоялец
 
Сообщения: 337
Зарегистрирован: 12.12.2001 (Ср) 12:59
Откуда: Russia, Saint-Petersburg

Сообщение ism » 07.03.2005 (Пн) 0:55

Как определить, что в TextBox введены только цифры?

Код: Выделить всё
if IsNumeric(Text1.text) then msgbox "Цифры"

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Re: Ввод только цифр

Сообщение GSerg » 07.03.2005 (Пн) 10:41

Чудик писал(а):Как определить, что в TextBox введены только цифры?


Код: Выделить всё
Option Explicit

Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Const ES_NUMBER As Long = &H2000&
Private Const GWL_STYLE As Long = -16

Private Sub Form_Load()
  Text1.Text = vbNullString
  SetWindowLong Text1.hwnd, GWL_STYLE, GetWindowLong(Text1.hwnd, GWL_STYLE) Or ES_NUMBER
End Sub
:wink:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 07.03.2005 (Пн) 15:25

Гы :) Кстати, а если сделать вставку (правка->вставить) в текстбокс, то все равно не поможет :)
Последний раз редактировалось A.A.Z. 07.03.2005 (Пн) 15:26, всего редактировалось 1 раз.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 07.03.2005 (Пн) 15:26

Всё просто, как колумбово яйцо!

P.S. может, сделать класс "Ввод в textbox только цифр 10 способами"? :lol:

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 07.03.2005 (Пн) 15:29

Можно :) Тогда надо еще вот это вставить
Код: Выделить всё
Private Sub Text1_Change()
Static OldText As String
If IsNumeric(Text1.Text) Then OldText = Text1.Text Else Text1.Text = OldText
End Sub
Предварительно в введя чего-нибудь в текстбокс из Form_Load :lol:

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 09.03.2005 (Ср) 11:40

Amed писал(а):Кстати, надо ещё учесть, что в разных странах разные разделители целой и дробной частей числа. Надо вытаскивать данные о текущем разделителе. Где найти, как вытащить, - не знаю ;). Спроси у Яндекса.


Узнать разделитель - проще не бывает - безо всякого API:

Format$(0,".")

А еще - я предпочитаю в KeyPress при нажатии на запятую/точку просто ставить нужный разделитель - получается удобней...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 155

    TopList