Обработка ошибок ввода данных
Основные теоретические сведения
Текстовые поля и контекст ввода
Чтобы упростить ввод текста, а также уменьшить количество ошибок ввода, предлагается множество разнообразных технологий. Один из вариантов — указание контекста ввода для текстовых полей, чтобы платформа отображала соответствующий элемент управления.
Всего поддерживается более 60 контекстов ввода. Наиболее часто используются следующие:
- по умолчанию — стандартная клавиатура. Первая буква предложение автоматически устанавливается в заглавную;
- Text — предоставляет автодополение, автокоррекцию, автоматическую расстановку апострофов, автоматическую установку акцентов и заглавных букв;
- Number — предназначен для ввода цифр;
- TelephoneNumber — отображает телефонную клавиатуру;
- EmailSmtpAddress — добавляет символ @ для быстрого доступа;
- CurrencyAmountAndSymbol — содержит цифры и значки валют;
- URL — отключается вся автокоррекция, добавляются кнопка .com и кнопка перехода.
Создайте приложение и добавьте внутрь элемента Grid следующий XAML код:
<ScrollViewer> <StackPanel> <TextBlock>По умолчанию</TextBlock> <TextBox/> <TextBlock>Текст</TextBlock> <TextBox InputScope="Text"/> <TextBlock>Цифры</TextBlock> <TextBox InputScope="Number"/> <TextBlock>Номер телефона</TextBlock> <TextBox InputScope="TelephoneNumber"/> <TextBlock>E-mail</TextBlock> <TextBox InputScope="EmailSmtpAddress"/> <TextBlock>Поиск</TextBlock> <TextBox InputScope="Search"/> <TextBlock>Деньги</TextBlock> <TextBox InputScope="CurrencyAmountAndSymbol"/> <TextBlock>URL</TextBlock> <TextBox InputScope="URL"/> </StackPanel> </ScrollViewer>
Запустите приложение и проверьте, как меняется панель ввода и настройки автокоррекции и автодополнения для разных контекстов ввода. Переключите эмулятор на русский интерфейс, добавьте русскую клавиатуру и протестируйте приложение ещё раз.
Обработка исключений
Если в программе текстовое поле предназначено для ввода числа, то рекомендуется задать для этого поля соответствующий контекст ввода. Однако, использование специализированного контекста ввода не гарантирует, что пользователь не сможет ввести некорректное значение. Например, строка "12.34.56" не является числом. При попытке преобразования этой строки в вещественное число программа сгенерирует исключение.
Чтобы избежать подобной ошибки, в код программы нужно добавить блок кода try — catch:
float f; try { f = float.Parse(numberTextBox.Text); } catch (Exception ex) { // обработка ошибки }
Если в секции try будет сгенерировано исключение, то программа передаст управление секции catch, в которой можно обработать ошибку и предотвратить аварийное завершение работы программы. В блоках кода try — catch можно обрабатывать любые исключения.
Избежать генерации исключений при вводе пользователем строки, которая не является числом, можно с помощью метода TryParse, который есть у всех классов для хранения целых и вещественных чисел:
float f; if (float.TryParse(numberTextBox.Text, out f)) { // продолжение работы } else { // обработка ошибки }
Метод TryParse не генерирует исключений, поэтому блоки кода try — catch здесь не нужны.
Дополнительные материалы
Сайт MSDN: http://msdn.microsoft.com/ru-ru/library/system.windows.input.inputscopenamevalue.aspx.
Сайт MSDN: http://msdn.microsoft.com/ru-ru/library/5b2yeyab.
Задание к работе
- Откройте в Visual Studio созданный в предыдущих работах проект программы для Windows Phone.
- Добавьте в описание текстовых полей для ввода данных подходящие значения свойства InputScope, представляющее контекст ввода. Это позволяет повысить удобство ввода данных в программу, но не избавит полностью от возможного ввода недопустимых значений.
- Добавьте в код программы блоки try — catch для обработки ввода недопустимых значений, а также код для того чтобы показать пользователю, какие данные он ввёл неверно.
- Запустите программу и проверьте правильность её работы в случае, если пользователь ввёл неверные данные, а затем исправил ошибочно введённые данные.
- Составьте отчёт о проделанной работе. Включите в отчёт необходимые листинги программы.