Привязка перечисления к комбинированному окну WinForms, а затем установка его - PullRequest
109 голосов
/ 25 мая 2009

многие люди ответили на вопрос, как связать перечисление со списком в 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

У кого-нибудь есть идеи, как это сделать?

Ответы [ 26 ]

0 голосов
/ 06 ноября 2014

В Framework 4 вы можете использовать следующий код:

Чтобы связать перечисление MultiColumnMode с выпадающим списком, например:

cbMultiColumnMode.Properties.Items.AddRange(typeof(MultiColumnMode).GetEnumNames());

и для получения выбранного индекса:

MultiColumnMode multiColMode = (MultiColumnMode)cbMultiColumnMode.SelectedIndex;

примечание: в этом примере я использую комбинированный список DevExpress, вы можете сделать то же самое в комбинированном окне Win Form

0 голосов
/ 26 августа 2011

Старый вопрос, возможно, здесь, но у меня была проблема, и решение было легким и простым, я нашел это http://www.c -sharpcorner.com / UploadFile / mahesh / 1220 /

Он использует данные и прекрасно работает, так что проверьте это.

0 голосов
/ 31 августа 2011
comboBox1.DataSource = Enum.GetValues(typeof(MyEnum));

comboBox1.SelectedIndex = (int)MyEnum.Something;

comboBox1.SelectedIndex = Convert.ToInt32(MyEnum.Something);

Обе эти работы для меня, ты уверен, что нет ничего плохого?

0 голосов
/ 23 апреля 2014

Это всегда было проблемой. если у вас есть отсортированный Enum, например, от 0 до ...

public enum Test
      one
      Two
      Three
 End

вы можете привязать имена к списку, и вместо использования свойства .SelectedValue используйте .SelectedIndex

   Combobox.DataSource = System.Enum.GetNames(GetType(test))

и

Dim x as byte = 0
Combobox.Selectedindex=x
0 голосов
/ 07 ноября 2013

Общий метод установки перечисления в качестве источника данных для выпадающих списков

Дисплей будет имя. Выбранное значение будет само Enum

public IList<KeyValuePair<string, T>> GetDataSourceFromEnum<T>() where T : struct,IConvertible
    {
        IList<KeyValuePair<string, T>> list = new BindingList<KeyValuePair<string, T>>();
        foreach (string value in Enum.GetNames(typeof(T)))
        {
            list.Add(new KeyValuePair<string, T>(value, (T)Enum.Parse(typeof(T), value)));
        }
        return list;
    }
0 голосов
/ 25 мая 2009

Вы можете использовать функции "FindString ..":

Public Class Form1
    Public Enum Test
        pete
        jack
        fran
        bill
    End Enum
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ComboBox1.DataSource = [Enum].GetValues(GetType(Test))
        ComboBox1.SelectedIndex = ComboBox1.FindStringExact("jack")
        ComboBox1.SelectedIndex = ComboBox1.FindStringExact(Test.jack.ToString())
        ComboBox1.SelectedIndex = ComboBox1.FindStringExact([Enum].GetName(GetType(Test), Test.jack))
        ComboBox1.SelectedItem = Test.bill
    End Sub
End Class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...