Моя проблема:
Я ограничиваю текстовое поле 8 символами и показываю всплывающую подсказку, когда оно превышено (> 8), а не достигнуто (= 8). Использование функции .Maxlength
не позволяет пользователю превысить 8 символов, поэтому моя функция >8 никогда не выполняется.
Если я отказываюсь от функции .Maxlength
и вместо этого использую .Substring
для ограничения ввода, моя функция >8 выполняется, однако поведение отличается от .Substring
(сохраняются последние, а не первые 8 вводов, и я теряю звук предупреждения).
Было бы намного чище иметь возможность проверять каждый раз, когда .Maxlength
превышено, не затрагивая первые 8 входных данных.
Чтобы воспроизвести:
- В Visual Studio в режиме конструктора перетащите текстовое поле и подсказку на новую форму.
- Используйте следующее как есть:
Код:
Public Class Form1
Private Sub Textbox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
TextBox1.MaxLength = 8
If (Not IsNumeric(TextBox1.Text) And TextBox1.Text.Length > 0) Then
If ToolTip1.GetToolTip(TextBox1) = "" Then
ToolTip1.ToolTipTitle = "Input must be numeric!"
ToolTip1.Active = True
ToolTip1.IsBalloon = True
ToolTip1.ToolTipIcon = ToolTipIcon.Warning
ToolTip1.Show(vbNewLine, TextBox1, 45, -40)
End If
ElseIf TextBox1.Text.Length > 8 Then
'TextBox1.Text = TextBox1.Text.Substring(0, 8)
ToolTip1.IsBalloon = True
ToolTip1.ToolTipTitle = "8 character maximum!"
ToolTip1.Active = True
ToolTip1.ToolTipIcon = ToolTipIcon.Warning
ToolTip1.Show(vbNewLine, TextBox1, 45, -40)
Else
ToolTip1.Active = False
ToolTip1.Hide(TextBox1)
End If
End Sub
End Class
ErrorProvider
может сэкономить немного кода, а не создавать всевозможные подсказки - person Ňɏssa Pøngjǣrdenlarp   schedule 23.10.2014.MaxLength
в коде? - person Clarus Dignus   schedule 23.10.2014KeyPress
илиKeyDown
, но я думаю, что этот будет намного проще. Что касается MaxLength, свойство является постоянным, поэтому установка его в обработчике событий каждый раз была избыточной — как только вы его установили, теперь это так же, как если бы вы сделали это во время разработки — что, по-видимому, не то, что вы хотите делать в чтобы получить ожидаемое поведение. - person Joe Enos   schedule 23.10.2014.Substring
вместо.Maxlength
. - person Clarus Dignus   schedule 23.10.2014If Not IsNumeric
, являющееся родительским условием для условий ›8 и ›0. В настоящее время оператор ›8 является родительским вIf ToolTip1.GetToolTip()
, который производит инверсию... (продолжение)... - person Clarus Dignus   schedule 25.10.2014If Not IsNumeric
, каждый из которых содержитIf ToolTip1.GetToolTip()
, предотвращает срабатывание ›8. Удаление ›0 предотвращает инверсию, но за счет ›0. Это единственные перестановки, которые я могу вообразить с тем знанием, которое у меня есть в настоящее время. - person Clarus Dignus   schedule 25.10.2014TextBox1.Text.Length > 8
, вы можете поместить его в начало, а затем проверитьNot IsNumeric(TextBox1.Text)
. Вам не нужноTextBox1.Text.Length > 0
. Еще кое-что. Поскольку вы все время пишете один и тот же код (показывая всплывающую подсказку), поместите его в функцию. Я приведу вам пример, который я написал в качестве ответа. - person γηράσκω δ' αεί πο   schedule 25.10.2014