2009-05-29 4 views
1

J'ai un control, hébergé sur DesignSurface.Le contrôle Windows renvoie différentes valeurs lors de l'accès de différentes manières

Lorsque vous accédez à sa propriété Location par control.Location et que vous y accédez par propertyDescriptor.GetValue(control), j'obtiens des valeurs différentes.

propertyDescriptor est de type PropertyDescriptor.

Est-ce que quelqu'un a une solution à cela? J'ai vérifié que l'instance d'objet est la même.

+0

Eh bien, quelles sont les valeurs que vous obtenez des deux approches différentes? Et quel est le contrôle spécifique? –

+1

Peut-être plus important encore; D'où avez-vous eu le PropertyDescriptor? Il y a différentes façons de faire cela qui peuvent donner des résultats différents ... –

Répondre

1

Eh bien, cela peut dépendre de l'objet. et comment vous avez votre descripteur de type. Par exemple. ce pourrait être un descripteur personnalisé qui pourrait retourner quoi que ce soit. Si c'est le cas, vous pouvez donner à la méthode GetTypedescriptor l'information de ne pas utiliser de typedescripteurs personnalisés. (sry pour ne pas poster le code réel mais je n'ai pas un IDE disponible et ne me souviens pas de la syntaxe exacte).

Une approche différente consisterait à utiliser un PropertyInfo au lieu d'un PropertyDescriptor (si le reste du code fonctionne avec System.Reflection.PropertyInfo).

Vous pouvez obtenir le PropertyInfo de la longueur de la propriété pour la chaîne de sType comme celui-ci

typeof (string) .GetProperty ("Longueur"); ou si c'est un type inconnu au moment de la compilation comme ceci: obj.GetType(). GetProperty ("Length");

Si vous devez parcourir toutes les propriétés, appelez GetProperties à la place.

Mais tout cela repose sur PropertyInfo je pense que vous seriez en mesure d'utiliser PropertyInfo au lieu de PropertyDescriptor

+0

Ou mieux encore ... puisqu'il est connu pour être un contrôle ... pourquoi ne pas simplement le lancer pour contrôler et utiliser .Location ;-p –

Questions connexes