.Net / C # Reflection - Заполнение ComboBox - PullRequest
1 голос
/ 12 мая 2011

Привет всем,

У меня есть список "Типов", встречающих определенный критерий, который я получил с помощью отражения.Каждый из типов - это отдельная функция, которую пользователь может выбрать во время выполнения.Если я добавлю больше подклассов позже, эта динамическая реализация избавит меня от необходимости помнить об обновлении пользовательского элемента управления.

Список типов хорош, но было бы неплохо отобразить что-то более значимое, чем Name, как написано в коде.Например, вместо «RacingBikeDesigner» я хотел бы отобразить «Racing Bike Designer» и, возможно, даже отобразить другие свойства, связанные с этим типом, например «Description», чтобы пользователь знал, что делает этот конкретный выбор.

Итак, я полагаю, вопрос, учитывая тип, как я могу предоставить более значимое представление пользователю?Могу ли я добавить статическое поле к каждому подклассу и вызвать его из Типа, или я могу каким-то образом использовать преобразователь типа?

Пользовательский элемент управления (ListBox, ComboBox и т. Д.) Связан с возвращаемым значением ниже, но это не удобно:

List<string> LeftHandedUserChoices = new List<string>();
Type[] AllTypesInThisAssembly = Assembly.GetAssembly(typeof(UserChoices)).GetTypes();
foreach (Type _currentType in AllTypesInThisAssembly)
    if (_currentType.IsSubclassOf(typeof(UserChoices)))
        LeftHandedUserChoices.Add(_currentType.Name);
return LeftHandedUserChoices;

Cheers, Q

Ответы [ 3 ]

3 голосов
/ 12 мая 2011

У вас есть несколько вариантов сделать это. Вы можете использовать атрибут в вашем типе для описания или поместить его в статическое поле / свойство в Типе и получить его, используя отражение.

Если локализация является проблемой, вы, вероятно, захотите сохранить имя строки ресурса и отобразить значение ресурса в runtme.

2 голосов
/ 12 мая 2011

Добавьте пользовательские C # атрибуты к вашим типам.

0 голосов
/ 12 мая 2011

Один из методов для вас - анализировать имена классов в соответствии с соглашением об именах, которое вы используете (в вашем случае похоже на Pascal).Например, RacingBikeDesigner станет Racing Bike Designer.Вот разбор пример .

...