2015-03-12 1 views
0

У меня есть следующие два обработчика событий для поля EditText, первый работает, а второй - нет. Я предпочел бы, чтобы второй работал, потому что первый обработчик событий требует, чтобы пользователь нажал клавишу ввода, которую, как я подозреваю, не каждый будет делать.Xamarin Android EditText.KeyPress vs EditText.TextChanged events

Первый и работает

private decimal paidAmount; 
private EditText EditTextPaidAmount; 

EditTextPaidAmount = RootView.FindViewById<EditText>(Resource.Id.editTextAmountPaid); 
      EditTextPaidAmount.KeyPress += (object sender, View.KeyEventArgs e) => 
      { 
       e.Handled = false; 
       if (e.Event.Action == KeyEventActions.Down && e.KeyCode == Keycode.Enter) 
       { 
        paidAmount = Decimal.Parse(EditTextPaidAmount.Text); 
        RenderInvoiceTotals(); 
        e.Handled = true; 
       } 
      }; 

Это здесь не работает, он бросает System.FormatException "Недопустимый символ в позиции 0"

EditTextPaidAmount = RootView.FindViewById<EditText>(Resource.Id.editTextAmountPaid); 
      EditTextPaidAmount.TextChanged += (object sender, Android.Text.TextChangedEventArgs e) => 
      { 
        paidAmount = Decimal.Parse(EditTextPaidAmount.Text, CultureInfo.InvariantCulture); 
        RenderInvoiceTotals(); 
      }; 

ответ

0

Может быть, вы могли бы попробовать использовать Decimal.TryParse вместо этого?

Этот код работает для меня:

edit.TextChanged += (sender, args) => 
{ 
    decimal decimalValue; 
    var isDecimal = Decimal.TryParse(edit.Text, out decimalValue); 
    if (isDecimal) 
    text.Text = decimalValue.ToString(); 
}; 

исключение исходя из RenderInvoiceTotals?

+0

Спасибо, TryParse кидал же исключение. –

+0

@Val Я обновил ответ. Я использую Xamarin 3.9 и Xamarin.Android 4.20 – angak

+0

Спасибо @ Ангак, это определенно не RenderInvioiceTotals, который бросает исключение, потому что весь этот метод делает отображение текста. Я применил ваш ответ, и он запускается, но как только текст изменяется, он через исключение –

0

Задайте свойство EditText inputType на numberDecimal.

ИЛИ

Использование Decimal.TryParse для синтаксического анализа значения EditText.

Потому что ошибка, о которой вы упомянули, обычно появляется из-за разбора строковых значений до десятичных.

+0

Спасибо Nirmal, я изменил свойство inputType без успеха. –

+0

@ValOkafor, я думаю, вы получаете эту ошибку при вводе текстовых значений в EditText или вы получаете проблему с номерами. Поскольку я попробовал код, о котором вы упоминали, он выдает ту же ошибку при вводе текстовых данных. – Nirmal