2011-03-20 2 views
3

J'ai un morceau de code qui ressemble à ceci:In Designer: La valeur par défaut de la propriété est définie, mais la propriété n'est pas appelée lors de la définition de la valeur par défaut?

[DefaultValue(false)] 
public bool Property 
{ 
    set 
    { 
     blah = value; 
     someControl.Visible = value; 
    } 
    get 
    { 
     return blah; 
    } 
} 

Quand je regarde les propriétés dans le concepteur, la propriété est définie sur false (vrai ou si je joue avec elle).
Mais la propriété n'est pas définie. La valeur Visible du contrôle n'est pas modifiée.

Comment puis-je faire en sorte que le concepteur définisse réellement la propriété avec la valeur par défaut?

Répondre

3

L'attribut [DefaultValue] est uniquement un indice pour le concepteur et le sérialiseur. C'est entièrement à vous de vous assurer que la valeur par défaut que vous avez promise dans l'attribut est en fait la valeur de la propriété. Le setter de propriété n'est pas appelé dans votre cas car le sérialiseur a détecté que la valeur actuelle de la propriété est égale à la valeur par défaut et peut donc omettre l'affectation de propriété. C'est une optimisation, cela rend InitializeComponent() plus petit et plus rapide.

Vous le faites simplement en initialisant la valeur de la propriété dans votre constructeur. Prenez garde que la propriété Visible d'un contrôle par défaut soit true.

1

Deux options;

  • prennes la valeur par défaut (defaults bool false en tout cas)
  • utilisation de ShouldSerialize * pour préciser

dans ce dernier, vous voudrez peut-être un bool? pour suivre « ensemble explicite » vs « par défaut implicite »:

Notez que Réinitialiser * et * sont ShouldSerialize motifs reconnus par le modèle de composant.

+0

Je souhaite que la propriété ait la valeur par défaut. Je voudrais simplement que le designer appelle réellement la propriété, au lieu de simplement la définir comme fausse (donc la visibilité du contrôle changera). Au moment de l'exécution, il semble fonctionner correctement, et la valeur par défaut avec la visibilité du contrôle. –

+0

@Yochai - la combinaison de Reset * et ShouldSerialize * devrait fonctionner * comme * par défaut, mais permettant un contrôle explicite. –

+0

1. La valeur par défaut de booléen est false, mais la valeur par défaut visible est true. Donc j'ai besoin que ça soit faux. 2. Je pourrais aussi simplement appeler this.Propery = flase; dans le InitializeComponent() ... –

Questions connexes