TextBox Событие TextChanged не срабатывает, когда Visible = False? - PullRequest
4 голосов
/ 22 июня 2010

У меня есть текстовое поле, привязанное к источнику данных.Событие TextChanged текстового поля обновляет другое текстовое поле.

Проблема в том, что я не хочу, чтобы первое текстовое поле отображалось, поэтому я установил для его свойства Visible значение false.

Однако теперь TextChangedсобытие не срабатывает!

Я могу обойти это, установив Visible=True, Left=-100000 при загрузке формы, но я бы хотел правильное решение.

Может кто-нибудь предложить объяснение?

Ответы [ 4 ]

7 голосов
/ 24 июня 2010

Установите textbox.Visible = false в событии FormLoad, а не в конструкторе.Это связано с созданием ручки.Если текстовое поле не отображается во время построения, то дескриптор не создается.Если текстовое поле станет невидимым после построения, тогда будет создан дескриптор и произойдут события.

См. Это обсуждение в MSDN.

3 голосов
/ 14 марта 2011

Альтернативным решением для принятого ответа является настройка прослушивателя TextChanged на Loaded, это работает для меня точно так же (по крайней мере, в Silverlight) и сохраняет представление дизайнера в должном порядке.

0 голосов
/ 22 июня 2010

Что это за источник данных?Это может быть событие, которое вы можете использовать напрямую вместо текстового поля для прослушивания обновления.

0 голосов
/ 22 июня 2010

Если Visible равно false, то Control не отображается. Поэтому он не сможет запустить событие.

Вместо этого установите style на display:none. Вы можете установить / снять это значение программно, используя коллекцию Attributes:

MyTextBox.Attributes.Add("style", "display: none");
...