Почему свойство Visible неправильно обновляется в UserControl?

Иногда свойство Visible моего UserControl не обновляется правильно. Это происходит во время загрузки моего приложения, в OnFontChanged, запускается изнутри InitializeComponent, вероятно, потому, что некоторые другие вещи еще не настроены. Я просто не могу узнать, что.

альтернативный текст

vScrollBar является UserControl и находится внутри другого UserControl. По-видимому, это происходит только при попытке установить значение true. vScrollBar уже создал свой дескриптор, так как часы на IsHandleCreated говорят, что это правда.


person Gabriel    schedule 23.09.2010    source источник


Ответы (2)


Он может по-прежнему показывать false, если форма не загружена. Попробуйте установить его в событии OnLoad формы.

person Jeff Ogata    schedule 23.09.2010
comment
Фактическое практическое решение, спасибо! - person Gabriel; 23.09.2010

Чтение свойства Visible дает вам фактическое состояние видимости элемента управления, а не «предполагаемое» состояние. Что всегда будет ложным в методе InitializeComponent(), форма или элемент управления еще не видны до после запуска события Load. Это также будет ложным, если элемент управления контейнером не виден.

person Hans Passant    schedule 23.09.2010
comment
Вау, так очень легко вводить ошибки. Я установил Visible и поместил его в if() в следующей строке, думая, что это будет значение, которое я только что установил. Злая штука! - person magnattic; 11.08.2012
comment
@atticae: Тот факт, что Microsoft сделала что-то определенным образом в .net, не всегда означает, что это была хорошая идея. Казалось бы, Microsoft не могла решить, иметь ли свойство, говорящее, можно ли что-то увидеть, или что-то позволяет себя увидеть; на самом деле свойства были бы полезны, если бы им были даны разные имена, но по какой-то причине Microsoft решила иметь свойство с именем Visible, геттер которого возвращает первое, а сеттер управляет вторым. У некоторых компьютеров 1970-х годов были такие проблемы в конструкции, но люди никогда не учатся... - person supercat; 07.12.2012