VB.net: прекратить отправку нажатий клавиш delete и backspace, если в текстовом поле WPF нет текста
У меня есть большая проблема здесь на моем калькуляторе.
У меня динамическое обновление текстового поля, поэтому на textbox_change он автоматически нажимает кнопку ввода.
Private Sub textBox_TextChanged(sender As Object, e As TextChangedEventArgs) Handles textBox.TextChanged
If IsNumeric(textBox.Text) = False Then
button.IsEnabled = False
Else
button.IsEnabled = True
End If
button_Click(sender, e)
End Sub
Так как моя кнопка будет прерываться при любых других нажатиях клавиш, кроме отправленных целых чисел, каждый раз, когда пользователь отправляет клавишу возврата или удаляет, когда в текстовом поле нет других символов, программа падает.
Мой код кнопки, который будет падать на что-либо, кроме целых чисел, а также на button_click textbox.clear()
и нажатия клавиш (backspace, delete), отправленные, когда в текстовом поле нет целых чисел, так как я думаю, что он обнаруживает удаление нажатия клавиши как некоторую другую строку, а не UInt64.
If IsNumeric(textBox.Text) Then
b = CDbl(textBox.Text)
Else
Await Me.ShowMessageAsync("Error", "Please input a number.", MessageDialogStyle.Affirmative)
End If
Dim Input As ULong
Input = Convert.ToUInt64(textBox.Text)
textBox12.Text = (FormatNumber(Input))
Dim m As Decimal
Dim t As Decimal
Dim add As Integer
If b > 100000000 Then
t = 0.06
ElseIf b > 25000000 Then
t = 0.05
ElseIf b > 10000000 Then
t = 0.04
ElseIf b > 5000000 Then
t = 0.03
ElseIf b > 1000000 Then
t = 0.018
ElseIf b > 100000 Then
t = 0.008
End If
m = b - (b * t)
add = b - m
textBox1.Text = add
textBox2.Text = Int(m)
Так как мне это предотвратить? Поскольку сейчас ни один текст не может быть очищен без крайней осторожности. Это приведет к аварийному завершению с необработанным исключением типа 'System.FormatException', возникшим в mscorlib.dll. Могу ли я остановить удаление и возврат, когда в textbox.text нет символов? Как мне это сделать? Пожалуйста помоги!
2 ответа
Возможно, вы можете работать с проверкой?
Private Sub TextBox_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles TextBox.Validating
If Not IsNumeric(TextBox.Text) Then
e.Cancel = True
Else
Button_Click(sender, e)
End If
End Sub
Я решил это так:
Если Textbox.Text = "", то VariableName = AValue Else VariableName = Textbox.Text