2016-10-13 4 views
0

У меня есть текстовое поле в VB, которое настроено только для приема только числовых данных, и оно работает, за исключением ДВОИХ конкретных случаев.Текстовый ящик VB, принимающий не числовые данные

Если пользователь предоставляет нечисловую CHAR текстового поля самостоятельно очищает,

Однако, если пользователь сначала предоставляет номер, а затем предоставляет либо «-» или «+»

В текстовом поле будет принимайте это как действительный ввод.

Когда пользователь вводит еще один символ любого типа, то есть число или символ

Затем текстовое поле «реализует» и будет сам ясно.

Мне было интересно, связано ли это с тем, как VB хранит символы «-» и «+»?

Это лучший способ обойти это, чтобы добавить только два исключения, то есть, если вводятся «-» или «+», то самоочищаются?

Или есть более элегантное решение?

спасибо.

Код:

Private Sub TextBox1_Change() 

'Textval used as variable from user input 
'Numval becomes textval providing the user input is numerical 

Dim textval As String 
Dim numval As String 

    textval = TextBox1.Text 
    If IsNumeric(textval) Then 
    numval = textval 
    Else 
    TextBox1.Text = CStr(numval) 
    End If 
End Sub 
+0

[** Это **] (HTTP://stackoverflow.com/questions/15423114/checking-to-see-if-text-box-input-is-numeric?rq=1), возможно, стоит прочитать, поскольку это может быть то, что вы ищете. – Codexer

+0

Использование маскированного текстового поля может быть альтернативным решением того, что было предложено. –

ответ

-2

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

Private Sub TextBox1_Change() 
    Dim intVal As Integer = 0 
    If Not Integer.TryParse(TextBox1.Text, intVal) Then 
     TextBox1.Text = String.Empty 
    End If 
End Sub 

Это позволит лишь Integer типа, не являющихся альфа-символы ...

0

код vb.net :

If Asc(e.KeyChar) <> 13 AndAlso Asc(e.KeyChar) <> 8 AndAlso Not IsNumeric(e.KeyChar) Then 
' your code here 
    e.Handled = True 

End If

и вы можете заменить текст: код:

Text = Text.Replace("string", "replace_by_this_string") 
+0

И где он получает аргумент 'e' из вашего кода, который вы предоставили? На другой ноте ваш пример замены не имеет значения в целом, не имеет никакого отношения к его вопросу. – Codexer

0

Если программа требует от пользователя ввести только числовые данные в текстовое поле, вы должны следить за соблюдением ограничений, когда пользователь нажал клавишу

Используйте текстовое поле в KeyDown событие:

'Omitting the parameters and Handles keyword 
Private Sub textbox_KeyDown() 
    'Set the keys you would want to allow in this array 
    Dim allowedkeys As Keys() = {Keys.D1, Keys.D2, Keys.D3, Keys.D4, Keys.D5, Keys.D6, Keys.D7, Keys.D8, Keys.D9, Keys.D0, Keys.Back} 

    For i = 0 To allowedkeys.Length - 1 'Iterate through the allowed keys array 
     If e.KeyCode = allowedkeys(i) Then 'If the key pressed is present in the array... 
      Exit Sub 'The check returned a success. Exit and accept the key 
     End If 
    Next 
    e.SuppressKeyPress = True 'Supress all keys that failed the check 
End Sub 

Дон» Забудьте добавить больше ключей, которые вам нужны! Клавиша «Пробел», клавиши numpad, точки (точки)?

Таким образом, вы можете снять флажок в Changed событии и перейти непосредственно к numval = textval

Или для тех, кто ленивых программистов, numval = TextBox1.Text и numval = Val(TextBox1.Text) работали хорошо

Смежные вопросы