J'ai cette fonction qui évalue le contenu d'une zone de texte (ou d'une combobox ou d'une maskedtextbox) et, en conjonction avec un événement KeyPress, autorise ou non la saisie. Cette fonction est très utile pour les dates ou les zones de texte pour lesquelles seule la saisie numérique est valable. Elle autorise un nombre déterminé de chiffres après un seul point décimal, si cela est spécifié dans l'appel de fonction. Elle autorise également le caractère de retour en arrière si la zone de texte est pleine.
J'aimerais qu'il me permette de saisir ce qui serait autrement un texte valide lorsque la zone de texte est pleine mais qu'un ou plusieurs caractères sont mis en évidence (et seraient donc remplacés par le caractère d'appui sur la touche). Quelqu'un peut-il me montrer comment faire cela, s'il vous plaît ?
''' <summary>
''' Validates that input is numeric.
''' Allows one decimal place unless intDecimal is less than 1
''' Will allow a set number of numbers after the decimal place.
''' </summary>
''' <param name="strKeyPress">The key which has been pressed</param>
''' <param name="strText">Current text of the textbox</param>
''' <param name="intPosition">Current cursor position in textbox</param>
''' <param name="intDecimal">Number of decimal places desired.</param>
''' <returns>Boolean: true means that input is numeric, false means it is not.</returns>
''' <remarks>Used with a keypress event to validate input. Do not handle input if function returns false.</remarks>
Public Function InputIsNumeric(ByVal strKeyPress As String, ByVal strText As String, ByVal intPosition As Integer, ByVal intDecimal As Integer) As Boolean
Dim dot As Integer
Dim ch As String
Dim returnValue As Boolean
If Not Char.IsDigit(CType(strKeyPress, Char)) Then returnValue = True
If strKeyPress = "-" And intPosition = 0 Then returnValue = False 'allow negative number
If strKeyPress = "." And strText.IndexOf(".") = -1 And intDecimal > 0 Then returnValue = False 'allow single decimal point
dot = strText.IndexOf(".")
If dot > -1 Then 'limit to set decimal places
ch = strText.Substring(dot + 1)
If ch.Length > (intDecimal - 1) Then returnValue = True
End If
If strKeyPress = Chr(8) Then returnValue = False 'allow Backspace
Return returnValue
End Function