У меня есть эта функция, которая оценивает содержимое элемента управления 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