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

Другие вопросы по тегам