Моя проблема сводится к следующему:VB - TextChanged не срабатывает должным образом после нажатия клавиши backspace?
У меня есть шесть текстовых полей, которые ожидают значения от 0 до заданного числа. То, что я пытаюсь достичь:
- Если введенное число находится в пределах от 0 до заданного числа (в качестве метки), то текст будет оставаться черным
- Если введенное число превышает заданное число, то текст краснеют
проблема здесь состоит в том, что, если указанное число «10», и пользователь вводит 11, он становится красным, как и положено, ОДНАКО, если они попали в клавишу возврата (вошел в число теперь 1) номер остается красным, что не является предполагаемой функциональностью - номер 1 должен быть черным, так как он находится между 0 и указанным номером nu mber.
Все указанные цифры сейчас жестко закодированы (я нахожусь в новичке, и это просто то, что я делаю для удовольствия, чтобы увеличить функциональность программы, и я не получил добавления классов для каждого «Присвоения»), и вы можете вводить отрицательные числа с технической точки зрения, на данный момент меня это не волнует.
Это подпрограмма, которая добавляется в качестве обработчика для всех текстовых полей в пределах определенного GroupBox
' Handler which gets added to all TextBoxes in "grpGrades" GroupBox
Private Sub txtGradePoints_TextChanged(sender As Object, e As EventArgs)
' Take in generic sender (Textbox) and convert to TextBox (necessary due to Strict mode)
Dim textBox = CType(sender, TextBox)
Try
' the value of the current TextBox being checked
Dim val = Decimal.Parse(textBox.Text)
Select Case textBox.Name
Case "txtPostPoints"
If val > 10 Then textBox.ForeColor = Color.Red
Case "txtCh1TestPoints", "txtCh2TestPoints", "txtCh3TestPoints"
If val > 50 Then textBox.ForeColor = Color.Red
Case "txtCh2TutPoints", "txtCh3TutPoints"
If val > 25 Then textBox.ForeColor = Color.Red
Case Else
textBox.ForeColor = Color.Black
End Select
Catch
textBox.ForeColor = SystemColors.ControlText
End Try
End Sub
Это OnLoad обработчик, который получает соответствующие элементы управления TextBox из «grpGrades» GroupBox и добавляет вышеупомянутый обработчик TextChanged для каждого из них.
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Get array of TextBox Controls from the "grpGrades" GroupBox
Dim textBoxes = grpGrades.Controls.OfType(Of TextBox)()
' Go through the array of TextBoxes and add the TextChanged handler to each TextChanged event
For Each txt In textBoxes
AddHandler txt.TextChanged, AddressOf txtGradePoints_TextChanged
Next
'AddHandler txtPostPoints.TextChanged, AddressOf txtGradePoints_TextChanged
'AddHandler txtCh1TestPoints.TextChanged, AddressOf txtGradePoints_TextChanged
'AddHandler txtCh2TestPoints.TextChanged, AddressOf txtGradePoints_TextChanged
'AddHandler txtCh3TestPoints.TextChanged, AddressOf txtGradePoints_TextChanged
'AddHandler txtCh2TutPoints.TextChanged, AddressOf txtGradePoints_TextChanged
'AddHandler txtCh3TutPoints.TextChanged, AddressOf txtGradePoints_TextChanged
End Sub
Последняя часть подпрограммы просто закомментировать код и как я изначально был добавлены обработчики, на всяком случае, что-то пошло не так с моим новым методом.
РЕДАКТИРОВАТЬ: Было ли это серьезно необходимо для downvote? По какой причине?
Я проголосовал за вас. Я думаю, что вы предложили совершенно правильно, и вы дали код, чтобы исправить эту проблему. +1 – Enigmativity
@Steve. Извините, на самом деле я показывал оранжевый нисходящий поток на вашем посту, не уверен, ударил ли я его при прокрутке, но я отменил его. (Я предполагаю). Если это причина, то стрелка вниз на вашем посту была оранжевой (и это выглядит так, потому что теперь стрелка вверх оранжевая), тогда я не намеренно делал это. Я редко опускаюсь вниз, если это просто что-то совсем не в основе. –
Без проблем @CharlesMay Мне просто интересно, если я сделал ошибку – Steve