VB: в текстовое поле можно вводить только цифры (не буквы) - PullRequest
4 голосов
/ 15 ноября 2009

У меня есть текстовое поле, которое контролирует интервал управления таймером. Как отфильтровать письма? Можно ли ограничить ввод только цифрами (например, если вы вводите букву или пробел, ничего не происходит)? Есть ли свойство текстового поля, которое может это сделать? Спасибо!

Ответы [ 5 ]

6 голосов
/ 15 ноября 2009

Можно ли заменить текстовое поле другим элементом управления? По своему опыту я обнаружил, что с элементом управления NumericUpDown легче работать, если вы хотите ограничить ввод только числовыми значениями.

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

3 голосов
/ 15 ноября 2009

Игнорирует все, кроме цифр

Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
    e.Handled = Not Char.IsDigit(e.KeyChar)
End Sub
2 голосов
/ 15 ноября 2009

Фильтрация ключей вряд ли гарантирует, что пользователь введет правильный номер. Временной интервал 0, вероятно, не годится. Вы не будете фильтровать ввод, когда пользователь нажал Ctrl + V. И как программист, я неравнодушен к программам, которые принимают 2E3 в качестве допустимого ввода.

Для решения этой проблемы было создано событие Validating. Удалите пару текстовых полей в форме и провайдер ошибок:

  Private Sub TextBox1_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
    If TextBox1.Text.Length = 0 Then Exit Sub
    Dim value As Double
    If Not Double.TryParse(TextBox1.Text, value) or value <= 15 or value > 1E6 Then
      TextBox1.SelectAll()
      ErrorProvider1.SetError(TextBox1, "Not a valid number")
      e.Cancel = True
    Else
      TextBox1.Text = value.ToString("N0")
      ErrorProvider1.SetError(TextBox1, "")
      Timer1.Interval = CInt(value)
    End If
  End Sub
0 голосов
/ 14 января 2013

Вы можете отфильтровать определенные ключи. Этот метод разрешает только цифры, удаление, возврат на одну позицию, стрелку влево и стрелку вправо

Private Sub txtBox_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles yourTxtboxName.KeyDown
    Try

            If Not (e.KeyValue = 8 Or e.KeyValue = 46 Or e.KeyValue = 48 Or e.KeyValue = 49 Or e.KeyValue = 50 Or e.KeyValue = 51 Or e.KeyValue = 52 Or e.KeyValue = 53 Or e.KeyValue = 54 Or _
               e.KeyValue = 55 Or e.KeyValue = 56 Or e.KeyValue = 57 Or e.KeyValue = 96 Or e.KeyValue = 97 Or e.KeyValue = 98 Or e.KeyValue = 99 Or _
              e.KeyValue = 100 Or e.KeyValue = 101 Or e.KeyValue = 102 Or e.KeyValue = 103 Or e.KeyValue = 104 Or e.KeyValue = 105 Or e.KeyValue = 37 Or e.KeyValue = 39) Then

                e.SuppressKeyPress() = True

            End If
    Catch ex As Exception
           'error handling
    End Try
0 голосов
/ 15 ноября 2009

e.Handled = не Char.IsDigit

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...