2015-07-07 4 views
0

У меня есть большая проблема здесь, на моем калькуляторе.VB.net: прекратить отправку удаленных и обратных нажатий клавиш, если в текстовом поле нет текста. 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. Могу ли я остановить удаление и backspace, когда в текстовом поле отсутствуют символы? Как мне это сделать? Пожалуйста помоги!

ответ

0

Возможно, вы можете работать с подтверждением?

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 
+0

«event» validating on textbox.validating не найден. любая помощь? – pleasega