2010-06-02 4 views
7

J'ai un contrôle utilisateur avec une propriété qui est d'un type de référence. Le concepteur Windows Forms conserve le code de génération qui attribue la valeur initiale de la propriété à null. Comment puis-je empêcher cela?Comment empêcher Windows Forms Designer de générer des affectations de valeurs par défaut pour les propriétés?

J'ai essayé d'ajouter les méthodes Reset et ShouldSerialize - Reset avait un corps vide et ShouldSerialize renvoyait toujours false - mais cela ne fonctionnait pas. J'ai également appliqué le BrowsableAttribute et l'ai placé à faux.

Edit:

Type de La propriété est une classe dans le même projet. Ce n'est pas un composant ou un contrôle, juste une classe ordinaire héritant de Object. De plus, le setter de la propriété appelle une méthode utilisant la valeur de la propriété comme argument et la méthode n'accepte pas null comme argument valide.

Exemple:

public MyClass Property1 
{ 
    get { return _property1; } 
    set 
    { 
     _property1 = value; 
     SomeMethod(value); // This method throws ArgumentNullException; 
    } 
} 

Note: Je me rends bien compte que méthodes get et set serait probablement plus approprié ici.

+0

Veuillez ajouter un exemple. Juste n'importe quel type de ref ou un ref à un composant/contrôle? –

+0

Même si vous ne définissez pas manuellement la valeur par défaut sur NULL, la valeur par défaut sera toujours implicitement NULL pour un type de référence. Qu'attendriez-vous que ce soit? –

+0

Je suppose que Windows Forms Designer écrase la valeur que vous écrivez initialement au contrôle? – Mike

Répondre

18

Murky, je pourrais utiliser un extrait. Dites au concepteur qu'il ne devrait jamais sérialiser la valeur de la propriété:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
    public Image Aardvark { get; set; } 
+0

+1 J'aime le net. –

+0

@Hans pouvons-nous également fournir une valeur par défaut pour une propriété et le rendre sur le concepteur? – Brij

Questions connexes