0 votes

Adapter la fonction de validation du texte pour prendre en compte le texte sélectionné

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

0voto

NoAlias Points 5327

Vous pouvez ajouter deux paramètres (intLengthOfHighlightedText et intLengthOfControl) et passer Textbox.SelectedText et TextboxName.MaxLength (en supposant un contrôle de texte à ligne unique). Ensuite, il suffit de travailler dans votre fonction. Sinon, vous pouvez passer la valeur de l'ensemble du contrôle textbox (en le surchargeant ou en faisant le travail pour la combobox, etc).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X