Modifiez le nom d'affichage de membres de l'énumération dans une grille de propriété
J'ai une propriété de la grille que j'utilise pour que les utilisateurs soient en mesure de configurer des objets pour n'importe quel plugin qui est écrit pour l'utiliser dans mon application. Je voudrais être en mesure de dire les développeurs à écrire des plugins à utiliser le ComponentModel Attributs pour leurs membres comme suit:
[CategoryAttribute("On Screen Display Settings"),
DescriptionAttribute("Whether or not to show the session timer."),
DisplayName("Show Session Timer")]
public bool ShowTimer
{
get;
set;
}
Cela fonctionne très bien. Maintenant, je voudrais que les membres d'une énumération, pour pouvoir être édité. c'est à dire
public enum Resolution_ : byte
{
DCIF,
CIF,
QCIF,
[DisplayName("4CIF")]
CIF4,
[DisplayName("2CIF")]
CIF2
}
De sorte qu'ils sont affichés dans la grille des propriétés de la liste comme suit:
DCIF
CIF
QCIF
CIF4
CIF2
Ainsi que toutes les Descriptions et les noms d'Affichage qu'ils peuvent avoir avec eux.
Il semble que je peux le faire uniquement avec des propriétés, événements et méthodes. Personne ne sait comment je peux faire ceci pour une énumération?
OriginalL'auteur Jonathan Henson | 2011-09-14
Vous devez vous connecter pour publier un commentaire.
Vous aurez à faire un
EnumConverter
classe et décorer votre propriété avec unTypeConverter
attribut pour ce faire.Voir ce À l'aide de grille de propriété .NET, c'est un plaisir de exemple:
Sympa, je n'ai pas rencontré de EnumConverter dans mes batailles avec la grille de propriété avant.
Lien hypertexte "Utilisation de la grille de propriété .NET" n'est pas correct maintenant.
Merci. J'ai mis à jour la réponse et de la levée de l'exemple de code que l'utilisateur affiché dans le cas où le lien est périmé de nouveau.
J'ai utilisé le code ci-dessus, mais il n'a pas de travail pour moi...
OriginalL'auteur LarsTech
La réponse que j'ai donné ici A un exemple de travail de ce. Voici la partie du code à partir de cet exemple, que vous souhaitez:
OriginalL'auteur mydogisbox
Vous pouvez joindre une coutume TypeConverter mise en œuvre de la propriété dont le type est votre énumération et de remplacer les GetStandardValuesSupported et GetStandardValues de revenir une liste personnalisée d'éléments à afficher dans la liste déroulante dans la grille des propriétés. Vous pouvez ensuite remplacer ConvertFrom/ConvertTo des méthodes pour gérer la conversion des valeurs de votre type d'énumération.
Vous pouvez également remplacer GetStandardValuesExclusive et il la renvoie "true" si l'utilisateur ne peut pas taper quoi que ce soit dans la valeur de la propriété.
Donc, quelque chose comme ceci:
De la mise en œuvre de GetStandardValues/ConvertFrom/ConvertTo vous pouvez ensuite utiliser la Réflexion pour sortir de la DisplayNameAttribute (ou DescriptionAttribute, qui peut être plus adapté à cette tâche) attributs des différentes enum membres à montrer que le texte, au lieu de coder en dur la liste des éléments à afficher.
OriginalL'auteur lee-m
Cela semble également fonctionner:
Composants à la recherche pour un attribut DisplayName par Réflexion d'en trouver un, et aussi loin que je peux dire que cela fonctionne. Est-il une raison pour laquelle cela pourrait être une mauvaise idée?
OriginalL'auteur John66NY