http://weblogs.asp.net/stevewellens/archive/2009/08/19/how-to-fill-a-listbox-dropdownlist-from-an-enum.aspxから、列挙値をに割り当てるこの例を参照してくださいリストボックス:
Array Values = System.Enum.GetValues(EnumType);
foreach (int Value in Values)
{
string Display = Enum.GetName(EnumType, Value);
ListItem Item = new ListItem(Display, Value.ToString());
TheListBox.Items.Add(Item);
}
ただし、私の Windows CE プロジェクト (.NET 1.1) には、"System.Enum.GetValues()" がありません。「GetUnderlyingType」と「ToObject」があります...
それらの1つがこれを達成するための鍵ですか?
アップデート
Jon Skeet のコードを実装しようとすると、"ListItem" 宣言が "型または名前空間名 'ListItem' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?)" で失敗します。
私は OpenNETCF を使用しています。したがって、VS は "OpenNETCF.Windows.Forms.ListItem" を使用ブロックに追加することを提案しています。しかし、そうすると、同じ行のコンストラクター部分 (ListItem item = new ListItem(field.Name, value.ToString());) で次のように不平を言います。 .ListItem.ListItem(string, int)' に無効な引数があります"
ハンドラー全体は次のようになりました。
private void PrinterPickerForm_Load(object sender, System.EventArgs e)
{
// Got this from Jon Skeet (http://stackoverflow.com/questions/17952900/how-can-i-assign-enum-values-to-a-listbox-in-net-1-1)
Type type = typeof(PrintUtils.BeltPrinterType);
foreach (FieldInfo field in type.GetFields(BindingFlags.Static | BindingFlags.Public))
{
// Fortunately unboxing to the enum's underlying field type works
int value = (int) field.GetValue(null);
ListItem item = new ListItem(field.Name, value.ToString());
listBoxBeltPrinters.Items.Add(item);
}
}
更新 2
これは機能します:
private void PrinterPickerForm_Load(object sender, System.EventArgs e)
{
Type type = typeof(PrintUtils.BeltPrinterType);
foreach (FieldInfo field in type.GetFields(BindingFlags.Static | BindingFlags.Public))
{
string display = field.GetValue(null).ToString();
listBoxBeltPrinters.Items.Add(display);
}
}
列挙型自体がリストボックスに入力されていないことは事実です。それらを表す文字列だけですが、それは問題ありません。
private void listBoxBeltPrinters_SelectedIndexChanged(object sender, System.EventArgs e)
{
//Tried to do something more "el[egant,oquent]" but .NET 1.1 seems to be holding me back
// http://stackoverflow.com/questions/17953173/how-can-i-assign-the-value-selected-in-a-listbox-to-an-enum-var/17953297?noredirect=1#17953297
string sel = listBoxBeltPrinters.SelectedItem.ToString();
if (sel == "Zebra QL220")
{
PrintUtils.printerChoice = PrintUtils.BeltPrinterType.ZebraQL220;
}
else if (sel == "ONiel")
{
PrintUtils.printerChoice = PrintUtils.BeltPrinterType.ONiel;
}
//else if ( . . .)
}