私のプロジェクトには、次のような列挙型があります。
public enum UserFrienlyEnum
{
[Description("it need spec training")]
SPECIAL_TRAINING = 1,
[Description("it need normal training")]
NORMAL_TRAINING = 2,
[Description("it need simple training")]
SIMPLE_TRAINING = 3
}
このメソッドを使用して、この列挙型をコンボボックスにバインドしました。
public static void setEnumValues(ComboBox cxbx, Type typ)
{
if (!typ.IsEnum)
{
throw new ArgumentException("Only Enum types can be set");
}
List<KeyValuePair<string, int>> list = new List<KeyValuePair<string, int>>();
foreach (int i in Enum.GetValues(typ))
{
string name = Enum.GetName(typ, i);
string desc = name;
FieldInfo fi = typ.GetField(name);
// Get description for enum element
DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attributes.Length > 0)
{
string s = attributes[0].Description;
if (!string.IsNullOrEmpty(s))
{
desc = s;
}
}
list.Add(new KeyValuePair<string, int>(desc, i));
}
// NOTE: It is very important that DisplayMember and ValueMember are set before DataSource.
// If you do, this works fine, and the SelectedValue of the ComboBox will be an int
// version of the Enum.
// If you don't, it will be a KeyValuePair.
cxbx.DisplayMember = "Key";
cxbx.ValueMember = "Value";
cxbx.DataSource = list;
}
上記のメソッドを使用して、コンボボックスを myEnum に次のようにバインドします。
setEnumValues(comboBox, typeof(myEnum));
ここで問題は、コンボボックスの項目または値を特定のものに設定する方法です。次のようになります。
combobox.SelectedValue = myEnum.value;
私のプロジェクトは、Visual Studio 2010 環境の C# Windows プロジェクトです。