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)值对应的
索引(Linq
FindIndex
相当快,即使您必须首先强制转换
集合
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;
    }