Многие люди ответили на вопрос, как связать перечисление с полем со списком в WinForms. Это вот так:
comboBox1.DataSource = Enum.GetValues(typeof(MyEnum));
Но это бесполезно без возможности установить фактическое значение для отображения.
Я пытался:
comboBox1.SelectedItem = MyEnum.Something; // Does not work. SelectedItem remains null
Я также пробовал:
comboBox1.SelectedIndex = Convert.ToInt32(MyEnum.Something); // ArgumentOutOfRangeException, SelectedIndex remains -1
Есть ли у кого-нибудь идеи, как это сделать?
SelectedValue
вызываетInvalidOperationException
у меня. "Невозможно установитьSelectedValue
в aListControl
с пустымValueMember
".Ответы:
Enum
Установка выпадающих значений из него
Получение перечисления из выбранного элемента
источник
Для упрощения:
Сначала инициализируйте эту команду: (например, после
InitalizeComponent()
)Чтобы получить выбранный элемент в поле со списком:
Если вы хотите установить значение для поля со списком:
источник
Код
в порядке, проблема должна быть в DataBinding. Назначения DataBinding происходят после конструктора, в основном при первом отображении поля со списком. Попробуйте установить значение в событии Load. Например, добавьте этот код:
И проверьте, работает ли.
источник
Пытаться:
правок:
Упс, вы уже пробовали это. Однако у меня это сработало, когда мой comboBox был настроен на DropDownList.
Вот мой полный код, который у меня работает (как с DropDown, так и с DropDownList):
источник
Допустим, у вас есть следующее перечисление
У вас должна быть структура для сопоставления этих значений со строкой:
Теперь верните массив объектов со всеми перечислениями, сопоставленными со строкой:
И используйте следующее, чтобы заполнить поле со списком:
Создайте функцию для получения типа перечисления на тот случай, если вы хотите передать его функции
и тогда все будет в порядке :)
источник
Tuple
вместо этого). Я бы превратил значение перечисления и описание в свойства, а затем добавил быnumberCB.DisplayProperty = "Caption"
; `иnumberCB.ValueProperty = "Num"
так, чтобы вы могли использовать егоSelectedValue
напрямую и привязать к нему.Попробуй это:
StoreObject - это мой пример объекта со свойством StoreObjectMyEnumField для хранения значения MyEnum.
источник
источник
это решение для загрузки элемента перечисления в поле со списком:
А затем используйте элемент перечисления как текст:
источник
Основываясь на ответе @Amir Shenouda, я получаю следующее:
Определение Enum:
Установка выпадающих значений из него:
Получение перечисления из выбранного элемента:
источник
источник
Полный исходный код ... Привязка перечисления к Combobox
источник
Я использую следующий вспомогательный метод, который вы можете привязать к своему списку.
источник
Преобразуйте перечисление в список строк и добавьте его в comboBox
Установите отображаемое значение с помощью selectedItem
источник
Ни один из них не сработал для меня, но это сработало (и у него было дополнительное преимущество, заключающееся в возможности иметь лучшее описание для имени каждого перечисления). Я не уверен, связано ли это с обновлениями .net или нет, но, тем не менее, я считаю, что это лучший способ. Вам нужно будет добавить ссылку на:
using System.ComponentModel;
Затем, когда вы хотите получить доступ к данным, используйте эти две строки:
источник
Вероятно, этого никогда не будет видно среди всех других ответов, но это код, который я придумал, его преимущество заключается в использовании,
DescriptionAttribute
если он существует, но в противном случае с использованием имени самого значения перечисления.Я использовал словарь, потому что в нем есть готовый шаблон элемента ключ / значение. A
List<KeyValuePair<string,object>>
также будет работать и без ненужного хеширования, но словарь делает код более чистым.Я получаю членов , которые имеют
MemberType
изField
и которые являются буквальным. Это создает последовательность только членов, которые являются значениями перечисления. Это надежно, поскольку перечисление не может иметь других полей.источник
должно работать нормально ... Как узнать, что
SelectedItem
это ноль?источник
Вы можете использовать функции «FindString ..»:
источник
Вы можете использовать список значений KeyValuePair в качестве источника данных для поля со списком. Вам понадобится вспомогательный метод, в котором вы можете указать тип перечисления, и он возвращает IEnumerable>, где int - это значение перечисления, а строка - это имя значения перечисления. В поле со списком установите для свойства DisplayMember значение «Key», а для свойства ValueMember - значение «Value». Value и Key - это общедоступные свойства структуры KeyValuePair. Затем, когда вы устанавливаете для свойства SelectedItem значение перечисления, как вы это делаете, оно должно работать.
источник
На данный момент я использую свойство Items, а не DataSource, это означает, что мне нужно вызывать Add для каждого значения перечисления, но это небольшое перечисление и его временный код в любом случае.
Затем я могу просто выполнить Convert.ToInt32 для значения и установить его с помощью SelectedIndex.
Временное решение, но пока ЯГНИ.
Приветствую вас за идеи, я, вероятно, воспользуюсь ими, когда сделаю правильную версию после того, как получу отзывы клиентов.
источник
Старый вопрос, возможно, здесь, но у меня была проблема, и решение было простым и простым, я нашел это http://www.c-sharpcorner.com/UploadFile/mahesh/1220/
Он использует привязку данных и отлично работает, так что проверьте его.
источник
И то, и другое работает на меня, вы уверены, что еще что-то не так?
источник
enum MyEnum { Something = 47 }
Универсальный метод установки перечисления в качестве источника данных для раскрывающихся списков
Отображение будет именем. Выбранное значение будет само Enum
источник
Это всегда было проблемой. если у вас есть Sorted Enum, например от 0 до ...
вы можете привязать имена к combobox и вместо использования
.SelectedValue
свойства использовать.SelectedIndex
и
источник
В Framework 4 вы можете использовать следующий код:
Чтобы привязать перечисление MultiColumnMode к combobox, например:
и получить выбранный индекс:
примечание: в этом примере я использую поле со списком DevExpress, вы можете сделать то же самое в поле со списком Win Form
источник
Немного поздно на эту вечеринку,
Метод SelectedValue.ToString () должен извлекать DisplayedName. Однако эта статья DataBinding Enum, а также With Descriptions показывает удобный способ не только иметь это, но вместо этого вы можете добавить настраиваемый атрибут описания в перечисление и использовать его для отображаемого значения, если хотите. Очень просто и легко и около 15 строк кода (если не считать фигурные скобки) для всего.
Это довольно изящный код, и вы можете сделать его методом расширения для загрузки ...
источник
используйте только приведение таким образом:
источник
Вы можете использовать метод расширения
Как использовать ... Объявить перечисление
Описание этого метода отображается в элементах поля со списком
источник
Это сработало для меня:
источник