Проверка текстового поля для WP7 - PullRequest
2 голосов
/ 03 мая 2011

В настоящее время разрабатывается приложение для Windows Phone, которое использует сервис геокодирования bing maps. У меня есть окно поиска, в котором пользователи могут вводить местоположение, а затем оно отправляется на карты Bing, которые возвращают геокординату.

Однако у меня возникла проблема с окном поиска. Когда я ввожу случайные буквы, результаты не обнаруживаются, и я внедрил код, чтобы пользователь был проинформирован о том, что не найдено ни одного пункта назначения. Проблема, однако, в том, что если по какой-либо причине пользователь решит написать несколько символов, например: & $% £ ", это приведет к сбою приложения, когда bing maps возвращает некоторые данные.

Как мне проверить правильность записи в текстовом поле, чтобы он проверял, есть ли в строке какие-либо символы, а затем отправлять их службе, если их нет?

Любая помощь очень ценится!

Ответы [ 2 ]

7 голосов
/ 03 мая 2011

Лучший вариант - запретить пользователю вводить недопустимые символы. Это можно сделать с помощью регулярных выражений в событии TextChanged. Вы можете пойти с разрешающей или ограничительной моделью.

Обязательно добавьте необходимый оператор using:

using System.Text.RegularExpressions;

В разрешающей модели разрешены все символы, кроме тех, которые специально запрещены:

private Regex rxForbidden = new Regex(@"[&$%£]", RegexOptions.IgnoreCase);
private void txtInput_TextChanged(object sender, TextChangedEventArgs e)
{
    txtInput.Text = rxForbidden.Replace(txtInput.Text, "");
    txtInput.SelectionStart = txtInput.Text.Length;
}

В модели с ограничениями разрешены только определенные символы:

private Regex rxForbidden = new Regex(@"[^0-9a-z]", RegexOptions.IgnoreCase);
private void txtInput_TextChanged(object sender, TextChangedEventArgs e)
{
    txtInput.Text = rxForbidden.Replace(txtInput.Text, "");
    txtInput.SelectionStart = txtInput.Text.Length;
}

Как правило, ограничивающую модель будет проще поддерживать (вам не придется возвращаться и добавлять дополнительные запрещенные символы по мере их обнаружения), но это действительно зависит от вашего приложения. В любом случае любое использование запрещенных символов будет полностью игнорироваться, как если бы пользователь не нажал эту клавишу.

Как примечание, у вашего textbox должно быть InputScope, установленное на Maps.

1 голос
/ 03 мая 2011

Лучшим способом может быть запрет пользователя вводить эти недопустимые символы. Быстрое решение состоит в том, чтобы просто удалить эти недопустимые символы из строки перед передачей их в элемент управления карты, например:

txtSearch.Text.Replace("&", "").Replace("$", "").Replace("%", "").Replace("£", "");

Но в долгосрочной перспективе будет проще отфильтровать недопустимые символы непосредственно в элементе управления textbox.

...