2010-09-23 24 views
4

Parfois, la propriété Visible de ma UserControl n'est pas mise à jour correctement. Cela se produit au démarrage de mon application, dans OnFontChanged, déclenché depuis InitializeComponent, probablement parce que d'autres choses n'ont pas encore été configurées. Je ne peux juste pas savoir quoi.Pourquoi la propriété Visible n'est pas correctement mise à jour dans un UserControl?

alt text

vScrollBar est un UserControl et est dans une autre UserControl. Apparemment, cela se produit uniquement lorsque vous essayez de définir la valeur sur true. vScrollBar a déjà son handle créé, comme une montre sur IsHandleCreated dit que c'est vrai.

Répondre

1

Il peut encore afficher false si le formulaire n'a pas été chargé. Essayez de le définir dans l'événement OnLoad du formulaire.

+0

Solution pratique réelle, Thx! – Gabriel

6

La lecture de la propriété Visible vous donne l'état actuel de visibilité du contrôle, et non l'état "prévu". Ce qui sera toujours faux dans la méthode InitializeComponent(), le formulaire ou le contrôle n'est pas encore visible jusqu'à après l'événement Load s'exécute. Il sera également faux si le contrôle du conteneur n'est pas visible.

+0

"Très instructif", thx (: – Gabriel

+0

Wow, il est vraiment facile d'introduire des bugs de cette façon.J'ai mis Visible et l'ai mis dans un if() dans la ligne suivante, en pensant que ce serait la valeur que je viens de définir. – magnattic

+0

@atticae: Le fait que Microsoft ait fait quelque chose d'une certaine manière dans .net ne signifie pas toujours que c'était une bonne idée, il semblerait que Microsoft ne puisse pas décider s'il y a une propriété qui indique s'il est possible de voir quelque chose, ou si quelque chose se permet d'être vu, en fait, les propriétés auraient été utiles si on leur avait donné des noms différents, mais pour une raison quelconque, Microsoft a décidé d'avoir une propriété appelée Visible dont le getter retourne la première chose et dont contrôle les secondes Certains ordinateurs des années 1970 avaient de tels problèmes dans leurs conceptions, mais les gens n'apprennent jamais ... – supercat