VB.net besoin D'une zone de texte pour N'accepter que les numéros

je suis assez nouveau à VB.net et je me demandais si quelqu'un pourrait m'aider avec un code. Je n'essaie pas de faire quoi que ce soit à invovled, juste avoir une boîte de texte qui prend la valeur numérique de 1 à 10. Je ne veux pas d'une corde ou d'un nombre au-dessus de 10. Si certains types un mot ou un caractère un message d'erreur apparaîtra, leur disant 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()
22
demandé sur Rico Jackson 2012-04-02 05:09:09

25 réponses

vous pouvez le faire avec L'utilisation D'entiers Ascii. Mettez ce code dans L'événement Keypress de la boîte de texte. e.KeyChar représente la touche pressée. Et le de la fonction intégrée Asc() le 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
24
répondu Isuru 2012-04-02 05:56:20

C'est ce que j'ai fait pour gérer à la fois l'entrée des clés et la copie/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 voulez autoriser les décimales, ajoutez

AndAlso Not e.KeyChar = "."

à la déclaration if dans la section KeyPress.

9
répondu BCarpe 2015-04-16 19:17:04

essaye ceci:

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
5
répondu Avadhani 2014-11-13 16:47:51

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 Not Integer.TryParse(TxtBox.Text, intValue) OrElse intValue < 1 OrElse intValue > 10 Then
    MessageBox.Show("Please Enter a Number from 1 to 10")
Else
    MessageBox.Show("Thank You, your rating was " & TxtBox.Text)
End If
3
répondu Meta-Knight 2012-04-02 02:03:08
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
répondu Roy 2014-06-13 01:49:15

Vous pouvez éviter n'importe quel code en utilisant un contrôle NumericUpDown plutôt qu'une boîte de texte, cela permet automatiquement seulement des nombres et a un max et min. Il permet également d'accéder au directement avec NumericUpDown1.Value ainsi que l'utilisation des flèches haut et bas pour définir le nombre. Aussi si un nombre plus élevé/au-dessus du max est entré il sautera au nombre autorisé le plus proche.

2
répondu bendataclear 2012-04-02 08:54:11
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
répondu moustafaghaddar 2014-07-23 11:08:16
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
répondu Er Harry Singh 2017-08-09 10:07:13
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
répondu Sameershona 2013-05-06 19:20:44
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 Supprimer et de définir des points décimaux

1
répondu Mr_LinDowsMac 2015-02-07 10:37:52

je sais que ce post est vieux mais je voulais partager quelque chose que j'ai mis en œuvre pour transformer une boîte de texte en ce que j'appelle une boîte de réception.

tout d'abord, vous devez 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

alors faites un sous-event 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 entre du texte, il évalue la chaîne et ne renvoie que des valeurs numériques qui sont dans les limites d'un entier standard. Avec le caractère " - " vous pouvez changer l'entier de positif à négatif et de nouveau de retour.

si quelqu'un voit quelque chose qui peut améliorer ce code, faites-le moi savoir, mais mes tests montrent que cela fonctionne très bien pour faire une IntBox.

modifier: J'ai trouvé une autre méthode qui peut fonctionner si vous utilisez des propriétés dans votre code. (Notez que cette propriété devra être séparée par TextBox)

create First the property:

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

alors 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 I configurer:

''' <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

avec tout cela combiné chaque fois qu'ils tapent quelque chose dans la boîte, il agira comme si c'était une textbox mais quand ils changent de focus, L'extension ToInteger définira la valeur comme un entier dans la propriété et la retournera dans la textbox.

ce qui signifie que si l'opérateur entre "-1W3" après les changements de focus il reviendra comme "-13" automatiquement.

1
répondu ARidder101 2016-01-20 15:43:12

c'est peut-être trop tard, mais pour d'autres nouveaux sang sur VB là-bas, voici quelque chose de simple.

tout d'abord, dans tous les cas, à moins que votre application ne nécessite, le blocage de l'entrée de clé de l'utilisateur est d'une certaine manière pas une bonne chose à faire, les utilisateurs peuvent interpréter l'action comme un problème sur le clavier du matériel et en même temps ne peut pas voir d'où leur erreur d'entrée de clé est venue.

En voici un simple, permet à l'utilisateur de taper librement son entrée puis de piéger 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
répondu TheBigBear 2016-08-13 01:59:09

la plus Simple jamais la solution pour Validation de la zone de texte dans VB.NET

TextBox Validation for Visual Basic (VB.NET)

tout d'abord, ajoutez un nouveau fichier de code VB dans votre projet.

  1. L'Explorateur De Solutions
  2. Clic Droit pour ton projet
  3. Sélectionner Ajouter> nouvel article...
  4. Ajouter un nouveau fichier de code VB (i.e. exemple.vb)

ou appuyez sur Ctrl+Maj+

copier & coller le code suivant dans ce fichier et lui donner un nom approprié. (C'est-à-dire 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

utilisez maintenant le code suivant pour former L'événement de charge 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

fait..!

1
répondu Laxmikant Bhumkar 2017-08-25 18:18:13

tout d'Abord définir la zone de texte MaxLength à 2 qui permettra de limiter la quantité d'entrée de texte dans votre TextBox. Alors vous pouvez essayer quelque chose comme ça en utilisant le KeyPress Event. Puisque vous utilisez un maximum de 2 chiffres (10), vous devrez utiliser un KeyEnter 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
répondu Mark Hall 2012-04-02 03:28:51

Vous Pouvez utiliser le code ci-dessous Textbox Événement Keypress:

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 autorise les numéros seulement et vous pouvez entrer seulement le numéro entre 1 à 10.

0
répondu Dinesh 2012-04-02 05:24:49
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
répondu test 2013-02-06 19:51:00

Cela a fonctionné pour moi... il suffit de vider complètement la boîte de texte lorsque les 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
répondu Brian 2015-06-04 23:07:12

copiez cette fonction dans n'importe quel module à l'intérieur de votre vb.net projet.

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 à l'intérieur de 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. Il fonctionne à 100% :)

0
répondu Arifuzzaman Pranto 2015-08-26 12:50:02

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

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

!(keyCode> = 65) le contrôle est pour exclure les Alphabets.

keyCode!= 32 le contrôle est pour exclure le caractère D'espace entre les nombres.

si vous voulez exclure les symboles aussi de l'entrée dans la zone de texte, alors incluez la condition ci-dessous aussi dans la propriété 'onkeydown'.

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

ainsi la zone de texte deviendra enfin

<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 pas non plus nécessaires.

KeyCode pour la touche' Space 'est' 32 ' qui n'est pas non plus nécessaire.

alors une combinaison de touches' Shift ' et 'Number' (qui dénote des symboles) n'est pas non plus nécessaire. Le code-clé pour' 0 'est ' 48' et ' 9 ' est "57".

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

Essayer et voir.

0
répondu EIV 2015-10-06 10:29:06

C'était mon dernier... Il obtient le tour de tous les type de questions aussi:

Voici une simple boîte 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 mauvaises entrées:

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
répondu Ryan Ramsey 2016-06-26 20:26:17

utilisez ceci dans votre événement Keydown de la boîte de texte.

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 à l'intérieur de votre vb.net projet.

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 à des nombres comme 2/4 ou des nombres comme 3.5 d'être entrés dans votre textbox si vous utilisez "nonnumberentered(e,Textbox1, True)".

permet seulement d'entrer des nombres dans la zone textbox si vous utilisez " nonNumberEntered(e,Textbox1, False)" ou "nonNumberEntered (e,Textbox1)".

modifier: ajouté texte.

0
répondu ionbucata 2016-10-05 07:07:59

j'ai eu une semblable exigence d'utilisation récemment pour un TextBox qui ne pouvait prendre que des nombres.

À la fin, j'ai utilisé un MaskedTextBox au lieu d'un TextBox. Vous définissez un" masque " pour la boîte de texte et il n'accepte que les caractères que vous avez définis - dans ce cas, les nombres. L'inconvénient est qu'il laisse un peu d'un laid ligne dans le TextBox;

A text mask

Ce que j'ai aimé à propos de l' MaskedTextBox c'était donc personnalisable. Si, pour quelque raison que ce soit vous vouliez un TextBox pour accepter une entrée dans le format de 3 ints, suivi de 2 lettres, tout ce que vous devez faire est de régler l' TextMask000LL. Il y a une charge de masques prédéfinis dans Visual Studio, et la documentation complète peut être trouvée ici.

Pre-defined masks

Maintenant, je sais que ce n'est pas complètement résolu votre problème, mais l'utilisation d'un MaskedTextBox enlève une grande partie de la complexité de la problème. Vous pouvez maintenant garantir que le contenu de la MaskedTextBox ne jamais être un Int, vous permettant d'exécuter une simple If instruction pour s'assurer que la valeur est =<10

0
répondu Jonny Wright 2016-10-31 00:07:22

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
répondu xDarC 2017-03-31 08:03:08

sur chaque entrée dans textbox (Event-Handles Restricted TextBox.TextChanged), vous pouvez faire un essai de caste le texte entré dans l'entier, si l'échec se produit, vous venez de réinitialiser la valeur du texte dans RestrictedTextBox à la dernière entrée valide (qui obtient la mise à jour constante sous la variable temp1).

Voici comment aller à ce sujet. Dans les sous qui se charge avec la forme (de moi.chargement ou mybase.charge), d'initialiser temp1 à la valeur par défaut de RestrictedTextBox.Texte

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 point de 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 utiliser ceci pour restreindre une boîte de texte à n'importe quel type que vous voulez: double, uint etc....

0
répondu thebunnyrules 2017-07-30 00:54:46

chaque zone de texte a un valider et validé événement que vous pouvez utiliser ensuite 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
répondu Jay 2017-09-21 15:52:27