C# 如何在使用bindingsource时自动从颜色转换为int?
我有一个实体,它的颜色属性类型为C# 如何在使用bindingsource时自动从颜色转换为int?,c#,winforms,entity-framework,data-binding,ef-code-first,C#,Winforms,Entity Framework,Data Binding,Ef Code First,我有一个实体,它的颜色属性类型为int。在我的表单中,我有一个自定义下拉列表(继承自组合框),其中显示KnownColor的列表 此下拉列表显示一个ColorInfo类,该类只是一个具有两个属性(名称:string,颜色:Color)的类。此外,我还做了以下工作: public new ColorInfo SelectedItem { get { return (ColorInfo)base.SelectedItem; } set { base.Se
int
。在我的表单中,我有一个自定义下拉列表(继承自组合框
),其中显示KnownColor
的列表
此下拉列表显示一个ColorInfo
类,该类只是一个具有两个属性(名称:string,颜色:Color)的类。此外,我还做了以下工作:
public new ColorInfo SelectedItem
{
get { return (ColorInfo)base.SelectedItem; }
set { base.SelectedItem = value; }
}
public new string SelectedText
{
get
{
if (SelectedIndex >= 0)
return SelectedItem.Name;
return String.Empty;
}
set
{
for (int i = 0; i < Items.Count; i++)
{
if (((ColorInfo)Items[i]).Name == value)
{
SelectedIndex = i;
break;
}
}
}
}
public new Color SelectedValue
{
get
{
if (SelectedIndex >= 0)
return SelectedItem.Color;
return Color.White;
}
set
{
for (int i = 0; i < Items.Count; i++)
{
if (((ColorInfo)Items[i]).Color == value)
{
SelectedIndex = i;
break;
}
}
}
}
如何以及在何处使用它,以便自动进行转换?该类有一些方法可能对您的情况有所帮助,如果您正在使用列表中的枚举器,则可以通过调用FromKnownColor
方法将其转换为颜色,如下所示:var color=color.FromKnownColor(KnownColor.White);
您也可以使用FromArgb
方法将整数转换为颜色,如:var color=color.FromArgb(5);
如果您想将颜色转换为整数,可以使用ToArgb()
方法:var argb=color.White.ToArgb();
在您的情况下,要从列表上的选择返回颜色,get应该执行以下操作:
public new Color SelectedValue
{
get
{
//Asuming SelectedIndex is a valid int color value from your list
if (SelectedIndex >= 0)
return Color.FromArgb(SelectedIndex);
return Color.White;
}
您的Known Color是一个自定义的数字,您打算将其转换为颜色,还是使用任何标准,如ARGB?@ArmandoBracho这是标准枚举。您有一个
int
类型的字段或属性绑定到Color
类型的属性。这是您想要转换的吗?我认为您应该更改自定义组合SelectedValue
属性转换为int
,并在其getter/setter中进行一些转换。getter只需返回SelectedItem
的(int)KnownColor
,setter应找到与(KnownColor)值对应的项
索引(LinqFindIndex
相当快,即使您必须首先强制转换项
集合ToList()
)。
public new Color SelectedValue
{
get
{
//Asuming SelectedIndex is a valid int color value from your list
if (SelectedIndex >= 0)
return Color.FromArgb(SelectedIndex);
return Color.White;
}