Question

J'ai un composant Windows.Forms qui a la valeur "mySize". propriété qui retourne une structure Size. Mon intention était de faire en sorte que cette propriété calcule automatiquement mySize renvoyé en fonction de la taille du composant, sauf si mySize a été explicitement définie, auquel cas, renvoie la valeur définie de mySize. Malheureusement, maintenant que j'intègre le composant dans une fiche, le concepteur Windows Forms a décidé de commencer à générer et à définir explicitement une valeur pour la propriété mySize, ce qui me gêne.

Il me faut donc définir une valeur par défaut pour que le concepteur s'en aille et me laisse tranquille.

J'ai lu des réponses concernant les réponses à System.ComponentModel.DefaultValue. Je sais donc que je dois définir manuellement la valeur de la propriété dans le constructeur, mais les réponses et la documentation que j'ai trouvées ne traitent que de la définition de la valeur par défaut de DefaultValue. Faux, une constante.

Une structure de taille n'est pas une constante et le compilateur VB panique, me disant que je ne peux pas définir une taille comme valeur par défaut pour la propriété de la taille du type car les tailles ne sont pas des constantes.

Cela me fait mal au cerveau.

Je peux probablement contourner le problème en créant des méthodes getMySize et setMySize au lieu d'utiliser une propriété, mais j'aimerais savoir s'il existe un moyen de définir la propriété par défaut pour une taille.

NB: Je n’utilise pas mySize comme une sorte de tentative déréglée de remplacer la propriété Size (qui a une valeur par défaut de 150x150, de sorte que SOMETHING semble pouvoir définir des valeurs par défaut pour les tailles); mySize est simplement une valeur de taille requise par la classe.

Était-ce utile?

La solution

Au lieu d'appliquer l'attribut DefaultValue, écrivez les deux méthodes suivantes:

bool ShouldSerializemySize() { ... }
void ResetmySize() { ... }

Dans ShouldSerializemySize, renvoie true si la valeur doit être sérialisée en code. Dans ResetmySize, réinitialisez la propriété à sa valeur par défaut.

Le concepteur de composants choisira automatiquement ces méthodes par réflexion.

Plus d'infos ici: http://msdn.microsoft.com/en-us/ bibliothèque / 53b8022e (VS.71) .aspx

Autres conseils

J'ai remarqué qu'il existe en fait un exemple spécifique permettant de définir une valeur par défaut de type Size dans la section Contenu de la communauté de Page MSDN de DefaultValue , qui suggère d'utiliser le constructeur DefaultValue décrit dans cette page .

Malheureusement, bien que l'exemple donné soit correct, en ce sens que cela fonctionne, il me semble que la documentation MSDN n'amènerait naturellement personne à cette réponse.

Je vais définir la réponse d'Albahari comme réponse à cette question (parce que sa réponse donne au moins un sens) et laisser cet exemple ici par souci d'exhaustivité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top