web-dev-qa-db-fra.com

VB.net a besoin d'une zone de texte pour n'accepter que des nombres

Je suis assez nouveau sur VB.net (autodidacte) et je me demandais si quelqu'un pourrait m'aider avec du code. Je n'essaie pas de faire quelque chose de trop impliqué, juste un TextBox qui accepte une valeur numérique comprise entre 1 et 10. Je ne veux pas qu'il accepte une chaîne ou un nombre supérieur à 10. Si quelqu'un tape un Mot ou caractère, un message d'erreur apparaît, lui indiquant d'entrer un nombre valide. C'est ce que j'ai évidemment ce n'est pas génial car j'ai des problèmes. Merci encore à tous ceux qui peuvent aider.

 If TxtBox.Text > 10 Then
        MessageBox.Show("Please Enter a Number from 1 to 10")
        TxtBox.Focus()
    ElseIf TxtBox.Text < 10 Then
        MessageBox.Show("Thank You, your rating was " & TxtBox.Text)
        Total = Total + 1
    ElseIf IsNumeric(TxtBox.Text) Then
        MessageBox.Show("Thank you, your rating was " & ValueTxtBox.Text)
    End If

    ValueTxtBox.Clear()
    ValueTxtBox.Focus()
25
Rico Jackson

Vous pouvez le faire en utilisant des entiers Ascii. Placez ce code dans l'événement Keypress de la zone de texte. e.KeyChar Représente la touche enfoncée. Et la fonction intégrée Asc() la convertit en son entier ascii.

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress

    '97 - 122 = Ascii codes for simple letters
    '65 - 90  = Ascii codes for capital letters
    '48 - 57  = Ascii codes for numbers

    If Asc(e.KeyChar) <> 8 Then
        If Asc(e.KeyChar) < 48 Or Asc(e.KeyChar) > 57 Then
            e.Handled = True
        End If
    End If

End Sub
30
Isuru

C'est ce que j'ai fait pour gérer à la fois la saisie de clé et le copier/coller.

Private Sub TextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox.KeyPress
    If Not Char.IsNumber(e.KeyChar) AndAlso Not Char.IsControl(e.KeyChar) Then
        e.Handled = True
    End If
End Sub

Private Sub TextBox_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox.TextChanged
    Dim digitsOnly As Regex = New Regex("[^\d]")
    TextBox.Text = digitsOnly.Replace(TextBox.Text, "")
End Sub

Si vous souhaitez autoriser les décimales, ajoutez

AndAlso Not e.KeyChar = "."

à l'instruction if dans la section KeyPress.

11
BCarpe

Essaye ça:

Private Sub txtCaseID_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtCaseID.KeyPress
    If Not Char.IsNumber(e.KeyChar) AndAlso Not Char.IsControl(e.KeyChar) Then e.KeyChar = ""
End Sub
6
Avadhani

Vous devez d'abord valider si l'entrée est en fait un entier. Vous pouvez le faire avec Integer.TryParse:

Dim intValue As Integer
If Integer.TryParse(TxtBox.Text, intValue) AndAlso intValue > 0 AndAlso intValue < 11 Then
    MessageBox.Show("Thank You, your rating was " & TxtBox.Text)
Else
    MessageBox.Show("Please Enter a Number from 1 to 10")
End If
4
Meta-Knight

Vous pouvez éviter tout code en utilisant un contrôle NumericUpDown plutôt qu'une zone de texte, cela n'autorise automatiquement que les nombres et a un max et un min. Il permet également d’accéder directement au numéro avec NumericUpDown1.Value ainsi que d’utiliser les flèches haut et bas pour définir le nombre. De plus, si un nombre supérieur/supérieur au maximum est entré, il passera au nombre autorisé le plus proche.

3
bendataclear
Private Sub MyTextBox_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles MyTextBox.KeyPress
    If Not IsNumeric(e.KeyChar) And Not e.KeyChar = ChrW(Keys.Back) Then
        e.Handled = True
    End If
End Sub
3
Roy
Private Sub Data_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Data.KeyPress
    If (Not e.KeyChar = ChrW(Keys.Back) And ("0123456789.").IndexOf(e.KeyChar) = -1) Or (e.KeyChar = "." And Data.Text.ToCharArray().Count(Function(c) c = ".") > 0) Then
        e.Handled = True
    End If
End Sub
2
moustafaghaddar
Private Sub textBox5_KeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles textBox5.KeyPress
        If Asc(e.KeyChar) <> 8 Then
            If Asc(e.KeyChar) < 48 Or Asc(e.KeyChar) > 57 Then
                e.Handled = True
            End If
        End If
    End Sub
2
Er Harry Singh

C'est peut-être trop tard, mais pour un autre nouveau sang sur VB), voici quelque chose de simple.

Premièrement, dans tous les cas, à moins que votre application n’exige, le blocage de la saisie de la clé de l’utilisateur n’est pas une bonne chose à faire, les utilisateurs peuvent interpréter l’action comme un problème sur le clavier matériel et ne pas voir en même temps l’erreur de saisie au clavier de.

En voici un simple: laissez l’utilisateur taper librement son entrée puis intercepter l’erreur plus tard:

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim theNumber As Integer
        Dim theEntry As String = Trim(TextBox1.Text)

        'This check if entry can be converted to
        'numeric value from 0-10, if cannot return a negative value.
        Try
            theNumber = Convert.ToInt32(theEntry)
            If theNumber < 0 Or theNumber > 10 Then theNumber = -1
        Catch ex As Exception
            theNumber = -1
        End Try

        'Trap for the valid and invalid numeric number
        If theNumber < 0 Or theNumber > 10 Then
            MsgBox("Invalid Entry, allows (0-10) only.")
            'entry was invalid return cursor to entry box.
            TextBox1.Focus()
        Else
            'Entry accepted:
            ' Continue process your thing here...

        End If
    End Sub
1
TheBigBear

Je sais que ce message est ancien, mais je voulais partager quelque chose que j'ai mis en œuvre pour transformer une TextBox en ce que j'appelle une IntBox.

Vous devez d'abord faire une extension avec:

<Runtime.CompilerServices.Extension()> _
Public Function HandledStringtoInteger(s As String) As Integer
    Try
        If s = String.Empty Then
            Return 0
        Else
            Return Integer.Parse(s)
        End If
    Catch
        Dim result As String = String.Empty
        Dim ReturnInt As Integer
        Dim Parsed As Integer
        For Each Character In s.ToCharArray
            If Character = "-" Then
                If s.Substring(0, 1).ToString <> "-" Then
                    result = Character + result
                End If
            End If
            If Character = "." Then
                Exit For
            End If
            If Integer.TryParse(Character, Parsed) Then
                result = result + Parsed.ToString
            End If
        Next
        If result <> String.Empty Then
            If Integer.TryParse(result, ReturnInt) Then
                Return Integer.Parse(ReturnInt)
            Else
                If Double.Parse(result) > Double.Parse(Integer.MaxValue.ToString) Then
                    Return Integer.MaxValue
                ElseIf Double.Parse(result) < Double.Parse(Integer.MinValue.ToString) Then
                    Return Integer.MinValue
                Else
                    Return Integer.Parse(ReturnInt)
                End If
            End If
        Else
            Return 0
        End If
    End Try
End Function

Créez ensuite un sous-événement TextChanged:

Private Sub TextBox_to_IntBox(sender As Object, e As TextChangedEventArgs) Handles YourTextBox.TextChanged
    If DirectCast(sender, TextBox).IsKeyboardFocused Then
        DirectCast(sender, TextBox).Text = DirectCast(sender, TextBox).Text.HandledStringtoInteger
        DirectCast(sender, TextBox).CaretIndex = DirectCast(sender, TextBox).Text.Length
    End If
End Sub

Ensuite, chaque fois que l'utilisateur saisit du texte, il évalue la chaîne et renvoie uniquement les valeurs numériques comprises dans les limites d'un entier standard. Avec le caractère "-", vous pouvez changer le nombre entier de positif en négatif et inversement.

Si quelqu'un voit quelque chose qui peut améliorer ce code, faites-le moi savoir, mais mes tests montrent que cela fonctionne à merveille pour créer une IntBox.

EDIT: J'ai trouvé une autre méthode qui peut fonctionner si vous utilisez des propriétés dans votre code. (Notez que cela nécessitera une propriété distincte par zone de texte)

Créez d'abord la propriété:

Public Class Properties
    Implement INotifyPropertyChanged

    Private _Variable as Integer
    Public Property YourProperty as Object
    get
      Return _Variable
    end get
    set(value as Object)
      _Variable = value.ToString.ToInteger 'I will give the ToInteger extension code later
    end set
    end property
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged

Public Sub OnPropertyChange(ByVal e As PropertyChangedEventArgs)
    If Not PropertyChangedEvent Is Nothing Then
        RaiseEvent PropertyChanged(Me, e)
    End If
End Sub
End Class

Ensuite, faites la reliure dans la classe principale de votre fenêtre:

Public WithEvents _YourVariable as New Properties

Public Sub New()
    InitializeComponent()
With YourTextBox
  .SetBinding(Textbox.TextProperty, New Binding("YourProperty"))
  .DataContext = _YourVariable
End With
End Sub

Enfin, voici le code d’extension ToInteger que j’ai configuré:

''' <summary>
''' Handles conversion of variable to Integer.
''' </summary>
''' <param name="X"></param>
''' <param name="I">Returned if conversion fails.</param>
''' <returns>Signed 32bit Integer</returns>
''' <remarks></remarks>
<Runtime.CompilerServices.Extension()> _
Public Function toInteger(Of T)(ByRef X As T, Optional I As Integer = 0) As Integer
    Dim S As String = X.ToString
    Try
        If S = String.Empty Then
            Return I
        Else
            Return Integer.Parse(S)
        End If
    Catch
        Dim result As String = String.Empty
        Dim ReturnInt As Integer
        Dim Parsed As Byte
        For Each Character In S.ToCharArray
            If Character = "-" Then
                If S.Substring(0, 1).ToString <> "-" Then
                    result = Character + result
                End If
            End If
            If Character = "." Then
                Exit For
            End If
            If Byte.TryParse(Character, Parsed) Then
                result = result + Parsed.ToString
            End If
        Next
        If result <> String.Empty Then
            If Integer.TryParse(result, ReturnInt) Then
                Return Integer.Parse(ReturnInt)
            Else
                If Double.Parse(result) > Double.Parse(Integer.MaxValue.ToString) Then
                    Return Integer.MaxValue
                ElseIf Double.Parse(result) < Double.Parse(Integer.MinValue.ToString) Then
                    Return Integer.MinValue
                Else
                    Return Integer.Parse(ReturnInt)
                End If
            End If
        Else
            Return I
        End If
    End Try
End Function

Lorsque tous ces éléments sont combinés, chaque fois qu'ils tapent quelque chose dans la zone, ils agissent comme s'il s'agissait d'une zone de texte, mais lorsqu'ils modifient le focus, l'extension ToInteger définit la valeur sous la forme d'un entier dans la propriété et la renvoie dans la zone de texte.

Cela signifie que si l'opérateur saisit "-1w3" après les changements de focus, il retournera automatiquement sous la forme "-13".

1
ARidder101

La solution la plus simple jamais conçue pour Validation de la zone de texte dans VB.NET

TextBox Validation for Visual Basic (VB.NET)

Commencez par ajouter le nouveau fichier de code VB) dans votre projet.

  1. Aller à Explorateur de solutions
  2. clic droit à votre projet
  3. Sélectionnez Ajouter> Nouvel élément ...
  4. Ajouter un nouveau VB (par exemple, exemple.vb)

o appuyez sur Ctrl+Shift+A

COPIER & COLLER le code suivant dans ce fichier et lui donner un nom approprié. (i.e. KeyValidation.vb)

Imports System.Text.RegularExpressions
Module Module1
    Public Enum ValidationType
        Only_Numbers = 1
        Only_Characters = 2
        Not_Null = 3
        Only_Email = 4
        Phone_Number = 5
    End Enum
    Public Sub AssignValidation(ByRef CTRL As Windows.Forms.TextBox, ByVal Validation_Type As ValidationType)
        Dim txt As Windows.Forms.TextBox = CTRL
        Select Case Validation_Type
            Case ValidationType.Only_Numbers
                AddHandler txt.KeyPress, AddressOf number_Leave
            Case ValidationType.Only_Characters
                AddHandler txt.KeyPress, AddressOf OCHAR_Leave
            Case ValidationType.Not_Null
                AddHandler txt.Leave, AddressOf NotNull_Leave
            Case ValidationType.Only_Email
                AddHandler txt.Leave, AddressOf Email_Leave
            Case ValidationType.Phone_Number
                AddHandler txt.KeyPress, AddressOf Phonenumber_Leave
        End Select
    End Sub
    Public Sub number_Leave(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        Dim numbers As Windows.Forms.TextBox = sender
        If InStr("1234567890.", e.KeyChar) = 0 And Asc(e.KeyChar) <> 8 Or (e.KeyChar = "." And InStr(numbers.Text, ".") > 0) Then
            e.KeyChar = Chr(0)
            e.Handled = True
        End If
    End Sub
    Public Sub Phonenumber_Leave(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        Dim numbers As Windows.Forms.TextBox = sender
        If InStr("1234567890.()-+ ", e.KeyChar) = 0 And Asc(e.KeyChar) <> 8 Or (e.KeyChar = "." And InStr(numbers.Text, ".") > 0) Then
            e.KeyChar = Chr(0)
            e.Handled = True
        End If
    End Sub
    Public Sub OCHAR_Leave(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        If InStr("1234567890!@#$%^&*()_+=-", e.KeyChar) > 0 Then
            e.KeyChar = Chr(0)
            e.Handled = True
        End If
    End Sub
    Public Sub NotNull_Leave(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim No As Windows.Forms.TextBox = sender
        If No.Text.Trim = "" Then
            MsgBox("This field Must be filled!")
            No.Focus()
        End If
    End Sub
    Public Sub Email_Leave(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim Email As Windows.Forms.TextBox = sender
        If Email.Text <> "" Then
            Dim rex As Match = Regex.Match(Trim(Email.Text), "^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,3})$", RegexOptions.IgnoreCase)
            If rex.Success = False Then
                MessageBox.Show("Please Enter a valid Email Address", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Email.BackColor = Color.Red
                Email.Focus()
                Exit Sub
            Else
                Email.BackColor = Color.White
            End If
        End If
    End Sub
End Module

Maintenant, utilisez le code suivant pour Form Load Event comme ci-dessous.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        AssignValidation(Me.TextBox1, ValidationType.Only_Digits)
        AssignValidation(Me.TextBox2, ValidationType.Only_Characters)
        AssignValidation(Me.TextBox3, ValidationType.No_Blank)
        AssignValidation(Me.TextBox4, ValidationType.Only_Email)
End Sub

Terminé..!

1
Laxmikant Bhumkar
Dim ch(10) As Char
Dim len As Integer
len = TextBox1.Text.Length
ch = TextBox1.Text.ToCharArray()
For i = 0 To len - 1
    If Not IsNumeric(ch(i)) Then
        MsgBox("Value you insert is not numeric")
    End If
Next
1
Sameershona
If Not Char.IsNumber(e.KeyChar) AndAlso Not e.KeyChar = "." AndAlso Not Char.IsControl(e.KeyChar) Then
            e.KeyChar = ""
End If

Cela vous permet d'utiliser la touche Suppr et de définir des points décimaux.

1
Mr_LinDowsMac

chaque zone de texte a un événement en cours de validation et validé, que vous pouvez utiliser comme suit: -

Private Sub PriceTxt_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles PriceTxt.Validating
                If Not IsNumeric(PriceTxt.Text) Then
                 PriceTxt.BackColor = Color.Red
                 MsgBox("The Price Should Be Numeric Only , Enter Again", vbCritical)
                 PriceTxt.Text = ""
                 PriceTxt.BackColor = Color.White
                End If
End Sub
0
Jay
Public Function Isnumber(ByVal KCode As String) As Boolean
    If Not Isnumeric(KCode) And KCode <> ChrW(Keys.Back) And KCode <> ChrW(Keys.Enter) And KCode <> "."c Then

        MsgBox("Please Enter Numbers only", MsgBoxStyle.OkOnly)
    End If
End Function

Private Sub txtBalance_KeyPress(ByVal sender As System.Object, ByVal e As 
System.Windows.Forms.KeyPressEventArgs) Handles txtBalance.KeyPress

    If Not Isnumber(e.KeyChar) Then
        e.KeyChar = ""
    End If

End Sub
0
test

Vous pouvez utiliser le code de suivi, Textbox Keypress Event:

Private Sub txtbox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtbox1.KeyPress
Try
If val(txtbox1.text) < 10 then
If Char.IsLetterOrDigit(e.KeyChar) = False And Char.IsControl(e.KeyChar) = False Then
e.Handled = True
End If
Else
e.Handled = True
End If
Catch ex As Exception
ShowException(ex.Message, MESSAGEBOX_TITLE, ex)
End Try
End Sub

Ce code n'autorise que les chiffres et vous ne pouvez entrer qu'un nombre compris entre 1 et 10.

0
Dinesh

Utilisez-le dans votre événement Textbox Keydown.

Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
    'you can enter decimal "if nonNumberEntered(e, TextBox1, True) then" 
    'otherwise just numbers "if nonNumberEntered(e, TextBox1) then"
    If nonNumberEntered(e, TextBox1, True) Then
        e.SuppressKeyPress = True
    End If
    If e.KeyCode = Keys.Enter Then
        'put your code here
    End If

End Sub

Copiez cette fonction dans n’importe quel module de votre projet vb.net.

Public Function nonNumberEntered(ByVal e As System.Windows.Forms.KeyEventArgs, _
                          ByVal ob As TextBox, _
                          Optional ByVal decim As Boolean = False) As Boolean
    nonNumberEntered = False

    If decim Then
        ' Determine whether the keystroke is a number from the top of the keyboard.
        If e.KeyCode < Keys.D0 OrElse e.KeyCode > Keys.D9 Then
            ' Determine whether the keystroke is a number from the keypad.
            If e.KeyCode < Keys.NumPad0 OrElse e.KeyCode > Keys.NumPad9 Then
                If e.KeyCode <> Keys.Decimal And e.KeyCode <> Keys.OemPeriod Then
                    If e.KeyCode <> Keys.Divide And e.KeyCode <> Keys.OemQuestion Then
                        ' Determine whether the keystroke is a backspace.
                        If e.KeyCode <> Keys.Back And e.KeyCode <> Keys.Delete _
                        And e.KeyCode <> Keys.Left And e.KeyCode <> Keys.Right Then
                            ' A non-numerical keystroke was pressed. 
                            nonNumberEntered = True
                        End If
                    ElseIf ob.Text.Contains("/") Or ob.Text.Length = 0 Then
                        nonNumberEntered = True
                    End If
                ElseIf ob.Text.Contains(".") Or ob.Text.Length = 0 Then
                    nonNumberEntered = True
                End If
            End If
        End If
    Else
        ' Determine whether the keystroke is a number from the top of the keyboard.
        If e.KeyCode < Keys.D0 OrElse e.KeyCode > Keys.D9 Then
            ' Determine whether the keystroke is a number from the keypad.
            If e.KeyCode < Keys.NumPad0 OrElse e.KeyCode > Keys.NumPad9 Then
                ' Determine whether the keystroke is a backspace.
                If e.KeyCode <> Keys.Back And e.KeyCode <> Keys.Delete _
                    And e.KeyCode <> Keys.Left And e.KeyCode <> Keys.Right Then
                    ' A non-numerical keystroke was pressed. 
                    nonNumberEntered = True
                End If
            End If
        End If
    End If

    'If shift key was pressed, it's not a number.
    If Control.ModifierKeys = Keys.Shift Then
        nonNumberEntered = True
    End If

End Function

Cela permettra de saisir des nombres tels que 2/4 ou des nombres tels que 3.5 dans votre zone de texte si vous utilisez decim "nonNumberEntered (e, Textbox1, True)".

Autorise uniquement les nombres à entrer dans la zone de texte si vous utilisez "nonNumberEntered (e, Textbox1, False)" ou "nonNumberEntered (e, Textbox1)".

Edit: texte ajouté.

0
ionbucata

Je sais que ce post est vieux mais je veux partager mon code.

 Private Sub txtbox1_TextChanged(sender As Object, e As EventArgs) Handles txtbox1.TextChanged
    If txtbox1.Text.Length > 0 Then
        If Not IsNumeric(txtbox1.Text) Then
            Dim sel As Integer = txtbox1.SelectionStart
            txtbox1.Text = txtbox1.Text.Remove(sel - 1, 1)
            txtbox1.SelectionStart = sel - 1
        End If
    End If
End Sub
0
j-j

Tout d’abord, définissez MaxLength de la TextBox sur 2, ce qui limitera la quantité de texte saisie dans votre TextBox. Ensuite, vous pouvez essayer quelque chose comme ceci en utilisant le KeyPress Event . Puisque vous utilisez un maximum de 2 chiffres (10), vous devrez utiliser un Key tel que Enter pour lancer la vérification.

Private Sub TextBox1_KeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
    Dim tb As TextBox = CType(sender, TextBox)
    If Not IsNumeric(e.KeyChar) Then    'Check if Numeric
        If Char.IsControl(e.KeyChar) Then  'If not Numeric Check if a Control
            If e.KeyChar = ChrW(Keys.Enter) Then
                If Val(tb.Text) > 10 Then  'Check Bounds
                    tb.Text = ""
                    ShowPassFail(False)
                Else
                    ShowPassFail(True)
                End If
                e.Handled = True
            End If
            Exit Sub
        End If
        e.Handled = True
        ShowPassFail(False)
    End If
End Sub

Private Sub ShowPassFail(pass As Boolean)
    If pass Then
        MessageBox.Show("Thank you, your rating was " & TextBox1.Text)
    Else
        MessageBox.Show("Please Enter a Number from 1 to 10")
    End If
    TextBox1.Clear()
    TextBox1.Focus()
End Sub
0
Mark Hall

Copiez cette fonction dans n’importe quel module de votre projet vb.net.

Public Function MakeTextBoxNumeric(kcode As Integer, shift As Boolean) As Boolean
    If kcode >= 96 And kcode <= 105 Then

    ElseIf kcode >= 48 And kcode <= 57
        If shift = True Then Return False
    ElseIf kcode = 8 Or kcode = 107 Then

    ElseIf kcode = 187 Then
        If shift = False Then Return False
    Else
        Return False
    End If
    Return True
End Function

Puis utilisez cette fonction dans votre événement textbox_keydown comme ci-dessous:

Private Sub txtboxNumeric_KeyDown(sender As Object, e As KeyEventArgs) Handles txtboxNumeric.KeyDown
If MakeTextBoxNumeric(e.KeyCode, e.Shift) = False Then e.SuppressKeyPress = True
End Sub

Et oui. Ça marche à 100% :)

0
Arifuzzaman Pranto

Vous pouvez utiliser la propriété onkeydown de la zone de texte pour limiter sa valeur aux nombres uniquement.

<asp:TextBox ID="TextBox1" runat="server" onkeydown = "return (!(event.keyCode>=65) && event.keyCode!=32);"></asp:TextBox>

! (keyCode> = 65) cocher pour exclure les alphabets.

keyCode! = 32 cocher pour exclure le caractère espace entre les nombres.

Si vous souhaitez également exclure les symboles de la zone de texte, incluez la condition ci-dessous également dans la propriété 'onkeydown'.

!(event.shiftKey && (event.keyCode >= 48 && event.keyCode <= 57))

Ainsi, la TextBox deviendra finalement

<asp:TextBox ID="TextBox1" runat="server" onkeydown = "return (!(event.keyCode>=65) && event.keyCode!=32 && !(event.shiftKey && (event.keyCode >= 48 && event.keyCode <= 57)));"></asp:TextBox>

Explication:

KeyCode pour 'a' est '65' et 'z' est '90'.

Les KeyCodes de '90' à '222' qui sont d'autres symboles ne sont également pas nécessaires.

KeyCode pour 'Space' Key est '32', ce qui n'est également pas nécessaire.

Ensuite, une combinaison de la touche "Shift" et de la touche "Numérique" (qui désigne les symboles) n'est également pas nécessaire. KeyCode pour '0' est '48' et '9' est '57'.

Tous ces éléments sont donc inclus dans la déclaration TextBox elle-même, qui produit le résultat souhaité.

Essayez de voir.

0
EIV

J'ai eu récemment une exigence d'utilisation similaire pour un TextBox qui ne pouvait prendre que des chiffres.

Finalement, j'ai utilisé un MaskedTextBox au lieu d'un TextBox. Vous définissez un "masque" pour la zone de texte et celle-ci n'acceptera que les caractères que vous avez définis - dans ce cas, des nombres. L'inconvénient est que cela laisse un peu d'une vilaine ligne dans le TextBox;

A text mask

Ce que j’ai aimé du MaskedTextBox était qu’il était si personnalisable. Si, pour une raison quelconque, vous souhaitiez qu'un TextBox n'accepte qu'une entrée au format 3 ints suivi de 2 lettres, il vous suffit de régler le paramètre TextMask sur 000LL. Il existe une charge de masques prédéfinis dans Visual Studio et la documentation complète est disponible ici .

Pre-defined masks

Maintenant, je sais que cela ne résout pas totalement votre problème, mais l'utilisation d'un MaskedTextBox élimine une partie importante de la complexité du problème. Vous pouvez maintenant garantir que le contenu de MaskedTextBox ne sera jamais qu'un objet Int, vous permettant ainsi d'exécuter une simple instruction If pour vous assurer que la valeur est =<10

0
Jonny Wright

Sur chaque entrée dans la zone de texte (event - Handles RestrictedTextBox.TextChanged), vous pouvez essayer de convertir le texte saisi en entier, en cas d'échec, vous devez simplement réinitialiser la valeur du texte dans RestrictedTextBox pour la dernière entrée valide (mise à jour en permanence). la variable temp1).

Voici comment s'y prendre. Dans le sous-fichier chargé avec le formulaire (me.load ou mybase.load), initialisez temp1 sur la valeur par défaut de RestrictedTextBox.Text.

Dim temp1 As Integer 'initialize temp1 default value, you should do this after the default value for RestrictedTextBox.Text was loaded.
If (RestrictedTextBox.Text = Nothing) Then 
    temp1 = Nothing
Else
    Try 
        temp1 = CInt(RestrictedTextBox.Text)
    Catch ex As Exception
        temp1 = Nothing
    End Try
End If   

À tout autre moment de la forme:

Private Sub textBox_TextChanged(sender As System.Object, e As System.EventArgs) Handles RestrictedTextBox.TextChanged
    Try
        temp1 = CInt(RestrictedTextBox.Text) 'If user inputs integer, this will succeed and temp will be updated
    Catch ex As Exception
        RestrictedTextBox.Text = temp1.ToString 'If user inputs non integer, textbox will be reverted to state the state it was in before the string entry
    End Try
End Sub

La bonne chose à ce sujet est que vous pouvez l'utiliser pour restreindre un champ de texte à n'importe quel type: double, uint, etc.

0
thebunnyrules

Cela a fonctionné pour moi ... effacez simplement la zone de texte car des touches non numériques sont enfoncées.

Private Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles TextBox2.TextChanged
    If IsNumeric(TextBox2.Text) Then
        'nada
    Else
        TextBox2.Clear()
    End If
End Sub
0
Brian

C’était ma dernière ... Cela évite aussi tous les problèmes de types:

Voici une simple zone de texte qui nécessite un numéro:

   public Sub textbox_memorytotal_TextChanged(sender As Object, e As EventArgs) Handles textbox_memorytotal.TextChanged
        TextboxOnlyNumbers(sender)
    End Sub

et voici la procédure qui corrige toutes les entrées incorrectes:

Public Sub TextboxOnlyNumbers(ByRef objTxtBox As TextBox)

    ' ONLY allow numbers
    If Not IsNumeric(objTxtBox.Text) Then

        ' Don't process things like too many backspaces
        If objTxtBox.Text.Length > 0 Then

            MsgBox("Numerical Values only!")

            Try
                ' If something bad was entered delete the last character
                objTxtBox.Text = objTxtBox.Text.Substring(0, objTxtBox.Text.Length - 1)

                ' Put the cursor and the END of the corrected number
                objTxtBox.Select(objTxtBox.Text.Length + 1, 1)

            Catch ex As Exception
            End Try
        End If
    End If
End Sub
0
Ryan Ramsey