LordOfTheShadow
Messages postés174Date d'inscriptionvendredi 22 décembre 2000StatutMembreDernière intervention 9 septembre 2010
-
14 avril 2009 à 12:15
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014
-
18 avril 2009 à 20:51
Bonjour à tous,
J'ai une classe A qui dérive d'une autre classe B qui dérive elle-même de la classe Component. Une fois le tout généré et la dll insérée dans la boîte à outils de Visual Studio et toutes les références faites je glisse mon composant A sur un formulaire. Mon problême c'est que par le code je n'arrive pas à accéder à la propriété (Name) qui apparait pourtant dans les propriétés en mode Design. Quelqu'un aurait-il une idée car ça devient urgent. Merci.
LordOfTheShadow
Messages postés174Date d'inscriptionvendredi 22 décembre 2000StatutMembreDernière intervention 9 septembre 20105 15 avril 2009 à 11:04
Désolé mais je crois que tu t'es trompé...Certes on peut accéder au composant en tappant directement son nom mais on n'accede pas à sa propriété Name par le code. J'ai même fait le test avec un Timer et j'ai regardé dans le designer généré par VS. On peut accéder au Name des userControl mais pas des Component... Ou en tout cas personne ne sait... mais merci quand même de l'idée.
LordOfTheShadow
Messages postés174Date d'inscriptionvendredi 22 décembre 2000StatutMembreDernière intervention 9 septembre 20105 15 avril 2009 à 14:59
Le problême c'est que je ne peux pas la récupérer dans une variable string par exemple. Il y une histoire de ISite, Icomponent mais j'arrive pas à cerner encore cette notion vu que je suis encore étudiant...Est-ce-que je t'ai bien expliqué?
La connaissance est la plus grande des richesses.
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 18 avril 2009 à 20:51
Bonjour,
Effectivement, c'est bien l'implémentation de ISite utilisée pour le composant en cours qui fourni ce nom quand on le voit dans le designer de Visual Studio.
Malgré la présence de parenthèses autour de "Name" dans la grille de propriétés, nous ne sommes pas vraiment dans le cas de la propriété Name de la classe Control là, mais bel et bien dans un cas particulier où la propriété n'est pas directement liée au type (par son descripteur de type, peu importe que cette propriété soit ajoutée au descripteur à l'exécution
Tu ne devrais pas avoir accès à Component.Site.Name à l'exécution car Component.Site devrait être null : pour faire simple il faut plutôt voir tout ceci comme des éléments utilisés au moment du design, pas de l'exécution.
Si tu as besoin d'utiliser ce nom, tu vas devoir adopter un comportement similaire à celui présent sur la classe Control (qui hérite de Component) :
- définir une propriété Name et lui donner le comportement standard d'une propriété : persistance de la chaine
- la décorer de l'attribut Browsable(false) pour qu'elle n'apparaisse pas dans la grille de propriétés (celle de ISite restera)
- personnaliser un peu l'accesseur get : si Component.Site est définie, tu dois/peux te servir de la valeur de Name
Ainsi, quand hostée dans un designer, get retournera la valeur Component.Site.Name (celle affectée par VS depuis la grille de propriétés) : la génération de code par le designer va donc générer une ligne avec l'affectation du nom saisi.
A l'exécution du code compilé, cette valeur sera affectée à ta propriété, que tu persisteras et retournera directement à l'appel de get car Component.Site sera alors null.