Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 18.03.2015
Сообщений: 8

Динамическое добавление экземпляра неизвестного мне enum-а

18.03.2015, 17:18. Показов 3653. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу свой аналог контрола PropertyGreed. (Зачем - по работе тестовое задание такое)
хочу менять значения property, если с текстом в виде string и булевыми переменными проблем нет, то вот с полями типа BorderStyle, Flatstyle возникли проблемы: это некоторые enum (потому как внутри проперти isEnum == true), и знать я о них ничего не знаю. Вернее так: знаю полное название (типа System.Windows.Form.BorderStyle) в виде string.
Пользователю нужен некий вылетающий comboBox (как в стандартном PropertyGreed), значит мне нужно объявить заполнить его значениями, которых я не знаю. Для этого мне нужно объявить как-то экземпляр этого enum-а (о котором я знаю только его имя), дальше уже пересчитать и выдавать значения.
Можно ли в принципе так сделать?
или же этот enum есть внутри property и я его не вижу?
ну, или же еще есть варианты решения проблемы?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.03.2015, 17:18
Ответы с готовыми решениями:

Значение из enum в конструктор экземпляра
Привет! /o Есть список enum, в нём указываю определённые значения. Нужно передать эти значения из списка в конструктор экземпляра.

Есть деталь неизвестного мне назначения
Есть запчасть(деталь) , неизвестного мне назначения, в интернете ничего не нашел. Подскажите , что это вообще ???? длина 8.7 см ,...

Динамическое создание неизвестного числа форм
простите за столь сырой вопрос, но все же: как программно создавать новые формы, так чтобы по щелчку кнопки "далее" всплывало...

2
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
18.03.2015, 18:04
Лучший ответ Сообщение было отмечено VladimirDX как решение

Решение

Если вы делаете PropertyGrid (greed = жадность), то наверняка используете рефлексию, а с ней выдернуть все что нужно не составляет проблем.

1. Получаете тип свойства.
2. Проверяете, является ли этот тип перечислением
3. Если является, то дергаете массив возможных значений.
4. Заполняете выпадающий список.

Вот накиданный на коленке код, который проверяет, является ли каждое свойство объекта перечислением и если является, то дергает текущее значение и список возможных:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
class Program
{
    static void Main()
    {
        FindEnums(new Foo());
    }
 
    static void FindEnums(object obj)
    {
        // Тип объекта
        var type = obj.GetType();
 
        // Список свойств
        var properties = type.GetProperties();
 
        foreach (var property in properties)
        {
            // Тип свойства
            var propType = property.PropertyType;
 
            // Проверка, является ли тип перечислением
            if (propType.IsEnum)
            {
                Console.WriteLine("Property '{0}' is enum of type '{1}'", property.Name, propType.Name);
                Console.WriteLine("Current value = '{0}'", property.GetValue(obj, null));
 
                // Получение списка всех значений данного перечисления
                var enumValues = Enum.GetValues(propType);
 
                Console.WriteLine("Possible values:");
                foreach (var value in enumValues)
                    Console.WriteLine(value);
            }
            else Console.WriteLine("Property '{0}' is not an enum", property.Name);
        }
    }
}
 
class Foo
{
    public int Number { get; set; }
    public DayOfWeek Day { get; set; }
    public string Name { get; set; }
    public ConsoleColor Color { get; set; }
}
2
0 / 0 / 0
Регистрация: 18.03.2015
Сообщений: 8
20.03.2015, 10:44  [ТС]
Спасибо, долго искал эту строчку:
var enumValues = Enum.GetValues(propType);
а за ошибку извините, в конце раб-дня мозги кипят)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.03.2015, 10:44
Помогаю со студенческими работами здесь

Динамическое создание экземпляра
Здравствуйте,форумчане) Есть один класс(назовём его с1),у него есть циклический метод (m.c1).В нём вызывается метод ещё одного...

Динамическое создание экземпляра структуры
Задача такая, имеется структура с параметром. Приходят данные по послед. порту с числом, если ещё не создан экземпляр структуры с полем...

Динамическое создание экземпляра класса
Подскажите начинаюшему! Есть FileUpload, с помощью него я хочу отправить файл на почтовый ящик. string file5 =...

Динамическое создание экземпляра класса.
Есть программа. Как сделать что-бы пользователь вводил имя, а затем создавался экземпляр класса с таким же именем?

Как мне подставить строку из массива в enum?
Есть массив string в котором содержатся строки dog cat bird и есть enum Animals с такими же вариантами, как мне подставить строку из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru