1

列挙型のすべての値を取得するメソッドがないため、コンボボックスを列挙型にバインドする方法はありますか?

私の列挙型は次のようなものです:

public enum SportName
{
    [Display(Name = "football", Description = "Football")]
    Football,

    [Display(Name = "table-tennis", Description = "Table Tennis")]
    TableTennis

}

属性を取得するメソッドがあります。私の問題は、これらの値をComboBoxにバインドする方法であり、コンボボックスは各アイテムの説明を表示する必要があります。

私にとっては、列挙型を反復処理して何らかのリストを作成する方法を見つけるだけで十分ですが、その方法がわかりません。

4

2 に答える 2

3

使ってみてください

Enum.GetNames(typeof(SportName)) // returns string[]

また

Enum.GetValues(typeof(SportName)) // returns int[]
于 2013-03-21T21:03:28.653 に答える
1

これは私のEnumComboBoxクラスからのもので、ComboBox

public Type EnumType { get; private set; }
public void SetEnum<T>(T defaultValue) where T : struct, IConvertible
{
    SetEnum(typeof(T));
    this.Text = (defaultValue as Enum).GetLabel();
}
public void SetEnum<T>() where T : struct, IConvertible
{
    SetEnum(typeof(T));
}
private void SetEnum(Type type)
{
    if (type.IsEnum)
    {
        EnumType = type;
        ValueMember = "Value";
        DisplayMember = "Display";
        var data = Enum.GetValues(EnumType).Cast<Enum>().Select(x => new
        {
            Display = x.GetLabel(), // GetLabel is a function to get the text-to-display for the enum
            Value = x,
        }).ToList();
        DataSource = data;
        this.Text = data.First().Display;
    }
    else
    {
        EnumType = null;
    }
}

public T EnumValue<T>() where T : struct, IConvertible
{
    if (typeof (T) != EnumType) throw new InvalidCastException("Can't convert value from " + EnumType.Name + " to " + typeof (T).Name);

    return (T)this.SelectedValue;
}

デザイン時に設定することはできませんが、ボックスを初期化すると、電話をかけることができます。

myCombo.SetEnum<SportName>();

その後、値を取得します

var sport = myCombo.EnumValue<SportName>();
于 2013-03-21T21:06:51.997 に答える