2010-06-22 4 views
4

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

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

Однако в настоящее время событие TextChanged не срабатывает!

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

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

+0

Что такое TextBox: WinForms, HTML или WPF? – Richard

+0

Извините, winforms. – Blorgbeard

ответ

7

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

См. Это discussion на MSDN.

-1

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

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

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

Извините за путаницу - я говорил о winforms. Добавлен тег к вопросу. – Blorgbeard

0

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

3

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

+0

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

Смежные вопросы