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()
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
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.
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
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
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
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.
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
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
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
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
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.
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
la plus Simple jamais la solution pour Validation de la zone de texte dans VB.NET
tout d'abord, ajoutez un nouveau fichier de code VB dans votre projet.
- L'Explorateur De Solutions
- Clic Droit pour ton projet
- Sélectionner Ajouter> nouvel article...
- 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..!
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 Key
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
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.
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
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
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% :)
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.
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
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.
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
;
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' TextMask
000LL
. Il y a une charge de masques prédéfinis dans Visual Studio, et la documentation complète peut être trouvée ici.
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
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
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....
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