2011-01-13 2 views
2

J'utilise une grille de propriété pour modifier, entre autres, une collection d'objets: alt textModifier le comportement par défaut de PropertyGrid et TypeConverterAttribute

Le comportement par défaut pour une collection fournit un bouton + pour modifier chaque membre du tableau.

J'utilise un formulaire pour modifier ce champ, qui est déjà câblé mais je veux supprimer la possibilité pour l'utilisateur de modifier le tableau en utilisant le « extension »

Il ressemblerait à ceci:

alt text

Update1: fait ProductIds une propriété IList au lieu de int [] fait maintenant ceci:

alt text

-----------------!

MAJ2: faites ProductIds une classe personnalisée, par exemple

MyWrappedCollection : IEnumerable<int> 

il ressemble maintenant à ceci:

alt text

Bien sûr, il encore des spectacles [+], mais il ne marche pas ÉTENDU pour quoi que ce soit (ie disparaît lorsque vous cliquez dessus)

Répondre

3

L'attribut qui contrôle si une propriété est extensible ou non il est TypeConverter. ExpandableObjectConverter est une classe intégrée qui offre la possibilité d'étendre une propriété et de l'examiner elle-même. Je devine par défaut que les tableaux et les collections utilisent ce convertisseur pour afficher ce qu'ils contiennent.

Vous pouvez écrire votre propre TypeConverter qui n'hérite pas de ExpandableObjectConverter et le définir comme attribut sur votre propriété pour supprimer le +.

+0

À la vôtre. Mon convertisseur de type étendu ExpandableObjectConverter pour une raison quelconque devrait avoir juste: TypeConverter. – wal

0

Par défaut pour une collection, elle utilise la méthode [...]. Peut-être pourriez-vous utiliser une collection (par exemple une liste) au lieu d'un tableau. Au fait, quelle est la raison particulière pour laquelle vous utilisez des baies?

+0

J'ai fait de ProductIds un IList au lieu de int [] et vous pouvez toujours l'agrandir. voir la capture d'écran sur le message original. – wal

+0

Excuses pour la critique, mais votre réponse ne fournit pas vraiment beaucoup d'aide. OUI, les [...] apparaissent mais seulement lorsque vous cliquez dessus. – wal

0

Vous devez implémenter et appliquer un UITypeEdtitor. Voir How to: Implement a UI Type Editor

Override GetEditStyle de votre UITypeEditor pour revenir Modal

+0

J'ai déjà un attribut UITypeEditor attaché à cette propriété. L'éditeur remplace GetEditStyle pour retourner Modal (comme je l'utilisais pour faire apparaître un formulaire) mais les icônes d'expansion apparaissent toujours. – wal

Questions connexes