Разрешить только числовые значения в текстовом поле - PullRequest
8 голосов
/ 22 декабря 2010

Я хочу создать элемент управления TextBox, который принимает только числовые значения.

Как я могу сделать это в VB6?

Ответы [ 12 ]

8 голосов
/ 22 декабря 2010

Щелкните правой кнопкой мыши по блоку управления> компонент> Управление -> Microsoft Masked Edit Control 6.0.
Или с обычным текстовым полем:

Private Sub Text1_Validate(Cancel As Boolean)
 Cancel = Not IsNumeric(Text1.Text)

End Sub
6 голосов
/ 22 декабря 2010

В текстовом поле Текст события Change проверьте, является ли введенное значение числом.Если это не число, снова установите старое значение.

Dim textval As String
Dim numval As String

Private Sub TextBox1_Change()
  textval = TextBox1.Text
  If IsNumeric(textval) Then
    numval = textval
  Else
    TextBox1.Text = CStr(numval)
  End If
End Sub
3 голосов
/ 26 марта 2013

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

Option Explicit

Private Const ES_NUMBER = &H2000&
Private Const GWL_STYLE = (-16)
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long


'set an editbox to numeric only - return the previous
'style on success or zero on error
Public Function ForceNumeric(ByVal EditControlhWnd As Long) As Long
    Dim lngCurStyle As Long
    Dim lngReturn As Long

    lngCurStyle = GetWindowLong(EditControlhWnd, GWL_STYLE)
    If lngCurStyle <> 0 Then
        lngReturn = SetWindowLong(EditControlhWnd, GWL_STYLE, lngCurStyle Or ES_NUMBER)
    End If

    ForceNumeric = lngReturn

End Function

Чтобы использовать его, вызовите функцию с дескриптором TextBox.

Private Sub Form_Load()
    Dim lngResult As Long

    lngResult = ForceNumeric(Text1.hwnd)

End Sub
1 голос
/ 18 октября 2018

Я использовал этот код в своем проекте:

Private Sub txtReceiptID_KeyPress(KeyAscii As Integer)
Dim Keychar As String
If KeyAscii > 31 Then
    Keychar = Chr(KeyAscii)
    If Not IsNumeric(Keychar) Then
        KeyAscii = 0
    End If
End If

End Sub

1 голос
/ 22 декабря 2010

Проверьте это:

http://www.vbforums.com/showthread.php?t=350067

Вам нужно проверять каждое нажатие клавиши, или вы можете сделать одну проверку в конце.

0 голосов
/ 20 мая 2019

Просто выберите элемент управления, метод keyPress и IDE создайте следующий метод для вас.Затем добавьте следующий код внутри метода

Private Sub txtControl_KeyPress(KeyAscii As Integer)
   KeyAscii = RealKeyascii(txtControl, KeyAscii, 256 ^ 8)
End Sub
0 голосов
/ 04 марта 2019

ПОПРОБУЙТЕ ЭТОТ КОД: ОТКЛЮЧИТЕ ПИСЬМО (A-Z, a-z) И ПРИНИМАЕТ НАЗАД, DOTS, КОММАСЫ И НОМЕРА (0-9) =)

Private Sub Text1_KeyPress (KeyAscii As Integer)
Если нет (KeyAscii> = vbKeyA и KeyAscii <= vbKeyZ), а не (KeyAscii> = 97 и KeyAscii <= 122), то <br> Else
KeyAscii = 0
Конец, если
End Sub

0 голосов
/ 13 октября 2017

Попробуйте этот код:

Private Sub Text1_Change()
    textval = Text1.Text
    If IsNumeric(textval) Then
        numval = textval
    Else
        Text1.Text = CStr(numval)
    End If
End Sub
0 голосов
/ 19 апреля 2017
If Len(Text2.Text) > 0 Then
    If IsNumeric(Text2.Text) = False Then
        Text2.SetFocus
        CreateObject("WScript.Shell").SendKeys "{BACKSPACE}"
    End If
End If
0 голосов
/ 28 апреля 2016

Я обычно использую этот код:

Private Sub text1_KeyPress(KeyAscii As Integer)
    If Not IsNumeric(Chr(KeyAscii)) And Not KeyAscii = 8 Then
        KeyAscii = 0
    End If
End Sub

Надеюсь, это поможет.

...