在 ComboBox 上映射枚举值
Map enum values on ComboBox
我想使用 C# Windows Forms 组合框来 select 枚举的值:
this.comboBoxColor.DataSource = System.Enum.GetValues(typeof(System.Drawing.KnownColor));
但是当我把它放在 InitializeComponent
中时,它用一个包含枚举中所有项目的数组的静态赋值替换了这一行。它会执行两次,一次针对 Datasource
,一次针对 Items
属性.
但是这些东西不能一起工作。当有绑定 DataSource
时,将项目添加到 Items
列表会导致错误,而当以另一种方式分配 SelectedValue
属性 时,将不再起作用。
我试过在 InitializeComponent
方法之外使用单独的方法来执行此操作。在单独的方法中简单地设置 DataSource 会产生以下错误:
System.InvalidOperationException:“无法在具有空 ValueMember 的 ListControl 中设置 SelectedValue。”
编辑:Microsoft 说使用简单的数组作为数据源应该是可能的:https://msdn.microsoft.com/nl-nl/library/x8160f6f(v=vs.110).aspx
可以在设计器中指定数据源,但它只允许 selecting classes。 class 必须实施什么才能使其发挥作用?
您可以编写一个简单的方法,将枚举转换为数据表,然后将该方法的结果用作数据源,并为组合的 ValueMember 和 DisplayMember 属性提供一对众所周知的名称
public DataTable CreateTableFromEnum(Type t)
{
DataTable dt = new DataTable();
if (t.IsEnum)
{
dt.Columns.Add("key", t);
dt.Columns.Add("text", typeof(string));
foreach(var v in Enum.GetValues(t))
dt.Rows.Add(v, v.ToString());
}
return dt;
}
并用
调用它
var colors = CreateTableFromEnum(typeof(KnownColor));
cbo.ValueMember = "key";
cbo.DisplayMember = "text";
cbo.DataSource = colors;
现在当您查看所选值时,您将获得所选颜色的数值
我想使用 C# Windows Forms 组合框来 select 枚举的值:
this.comboBoxColor.DataSource = System.Enum.GetValues(typeof(System.Drawing.KnownColor));
但是当我把它放在 InitializeComponent
中时,它用一个包含枚举中所有项目的数组的静态赋值替换了这一行。它会执行两次,一次针对 Datasource
,一次针对 Items
属性.
但是这些东西不能一起工作。当有绑定 DataSource
时,将项目添加到 Items
列表会导致错误,而当以另一种方式分配 SelectedValue
属性 时,将不再起作用。
我试过在 InitializeComponent
方法之外使用单独的方法来执行此操作。在单独的方法中简单地设置 DataSource 会产生以下错误:
System.InvalidOperationException:“无法在具有空 ValueMember 的 ListControl 中设置 SelectedValue。”
编辑:Microsoft 说使用简单的数组作为数据源应该是可能的:https://msdn.microsoft.com/nl-nl/library/x8160f6f(v=vs.110).aspx
可以在设计器中指定数据源,但它只允许 selecting classes。 class 必须实施什么才能使其发挥作用?
您可以编写一个简单的方法,将枚举转换为数据表,然后将该方法的结果用作数据源,并为组合的 ValueMember 和 DisplayMember 属性提供一对众所周知的名称
public DataTable CreateTableFromEnum(Type t)
{
DataTable dt = new DataTable();
if (t.IsEnum)
{
dt.Columns.Add("key", t);
dt.Columns.Add("text", typeof(string));
foreach(var v in Enum.GetValues(t))
dt.Rows.Add(v, v.ToString());
}
return dt;
}
并用
调用它var colors = CreateTableFromEnum(typeof(KnownColor));
cbo.ValueMember = "key";
cbo.DisplayMember = "text";
cbo.DataSource = colors;
现在当您查看所选值时,您将获得所选颜色的数值