Значение текстового поля изменено - PullRequest
4 голосов
/ 06 апреля 2010

Можно ли узнать, изменилось ли какое-либо из значений текстового поля в приложении.У меня есть около 30 текстовых полей, и я хочу запустить часть кода, только если какое-либо из значений текстовых полей изменилось за пределы 30. Есть ли способ узнать это.

Ответы [ 5 ]

9 голосов
/ 06 апреля 2010

Каждое текстовое поле будет вызывать событие TextChanged, когда его содержимое изменилось. Однако для этого необходимо подписаться на каждое событие.

Хорошей новостью является то, что вы можете подписаться на событие одним и тем же способом несколько раз. В обработчике есть параметр sender, который можно использовать для определения того, какое из ваших 30 текстовых полей действительно вызвало событие.

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

2 голосов
/ 06 апреля 2010

Вы можете назначить обработчик событий для каждого из событий TextBox TextChanged. Все они могут быть назначены одному и тому же обработчику событий в коде. Тогда вы будете знать, когда текст изменится. Вы можете установить поле логического флага в своем классе, чтобы записывать, что произошло изменение.

1 голос
/ 05 июня 2013

Вы также можете просто сделать это:

В вашем конструкторе:

MyTextBox.TextChanged += new TextChangedEventHandler( TextChanged );

А потом этот метод:

private void TextChanged(object Sender, TextChangedEventArgs e){
            //Do something
        }
1 голос
/ 07 апреля 2010

Возможно, это грубо и готово, но я так и сделал.

В конструкторе я создал

bool bChanged = false;

В обработчике событий TextChanged каждого элемента управления (фактически одинакового для каждого) я помещаю

bChanged = true;

При необходимости я мог бы выполнить некоторую обработку и установить для bChanged значение false.

1 голос
/ 07 апреля 2010

попробуйте это. Добавьте этот код в конструктор загрузки / загрузки. нет необходимости указывать событие в XAML явно

this.AddHandler(TextBox.TextChangedEvent, new TextChangedEventHandler(TextChanged));
private void TextChanged(object Sender, TextChangedEventArgs e)
{
    //ToDO (use sender to identify the actuale text from where it fired }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...