Адаптируйте функцию проверки текста для учета выбранного текста - PullRequest
0 голосов
/ 04 июня 2010

У меня есть эта функция, которая оценивает содержимое элемента управления textbox (или combobox или maskedtextbox) и, в сочетании с событием KeyPress, разрешает или запрещает ввод. Это очень полезно для дат или текстовых полей, для которых допустим только числовой ввод. Это позволяет установить количество цифр после одной десятичной точки, если это указано в вызове функции. Это также позволяет символ возврата, если текстовое поле заполнено.

Я бы хотел, чтобы он позволял мне вводить то, что в противном случае было бы допустимым текстом, когда текстовое поле заполнено, но один или несколько символов выделены (и поэтому будут заменены символом нажатия клавиши. Может кто-нибудь показать мне, как это сделать, пожалуйста

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

1 Ответ

0 голосов
/ 04 июня 2010

Вы можете добавить пару параметров (intLengthOfHighlightedText и intLengthOfControl) и передать Textbox.SelectedText и TextboxName.MaxLength (при условии однострочного текстового управления). Тогда просто проработайте это в своей функции. В противном случае вы можете передать значение всего элемента управления textbox (сделать его перегруженным или выполнить работу со списком и т. Д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...