简单地将许多枚举值添加到组合框中

时间:2014-02-11 14:41:23

标签: c# function combobox enums

我对c#和编程很新,我想知道如何将这段代码放入函数中。

comboBox1.Items.Add(DAO.DataTypeEnum.dbInteger);
comboBox1.Items.Add(DAO.DataTypeEnum.dbBigInt);
comboBox1.Items.Add(DAO.DataTypeEnum.dbBinary);
comboBox1.Items.Add(DAO.DataTypeEnum.dbBoolean);
comboBox1.Items.Add(DAO.DataTypeEnum.dbByte);
comboBox1.Items.Add(DAO.DataTypeEnum.dbChar);
comboBox1.Items.Add(DAO.DataTypeEnum.dbCurrency);
comboBox1.Items.Add(DAO.DataTypeEnum.dbDate);
comboBox1.Items.Add(DAO.DataTypeEnum.dbDecimal);
comboBox1.Items.Add(DAO.DataTypeEnum.dbDouble);
comboBox1.Items.Add(DAO.DataTypeEnum.dbFloat);
comboBox1.Items.Add(DAO.DataTypeEnum.dbGUID);
comboBox1.Items.Add(DAO.DataTypeEnum.dbLong);
comboBox1.Items.Add(DAO.DataTypeEnum.dbLongBinary);
comboBox1.Items.Add(DAO.DataTypeEnum.dbMemo);
comboBox1.Items.Add(DAO.DataTypeEnum.dbNumeric);
comboBox1.Items.Add(DAO.DataTypeEnum.dbSingle);
comboBox1.Items.Add(DAO.DataTypeEnum.dbText);
comboBox1.Items.Add(DAO.DataTypeEnum.dbTime);
comboBox1.Items.Add(DAO.DataTypeEnum.dbTimeStamp);
comboBox1.Items.Add(DAO.DataTypeEnum.dbVarBinary);

我有5个ComboBoxes,我认为不是为每个ComboBox编写所有这些,我可以创建一个函数,但无法想象如何做到这一点。还有办法改变名字吗?例如,当我下拉框时,它显示:dbInteger,dbBigInt?我可以更改那些显示整数,大整数?提前谢谢。

5 个答案:

答案 0 :(得分:9)

您可以在一行中执行此操作

comboBox1.Items.AddRange(Enum.GetNames(typeof(DAO.DataTypeEnum)));

关于显示名称,我通常会使用DescriptionAttribute并编写一个小的扩展方法来提取该信息,例如。

public enum DataTypeEnum
{
    [Description("Integer")]
    dbInteger,
    [Description("Big Int")]
    dbBigInt,
    ...
}

然后使用以下扩展方法

public static class EnumExt
{
    public static string Description(this Enum value)
    {
        var attr = (DescriptionAttribute)value.GetType().GetCustomAttributes(typeof(DescriptionAttribute), false)
            .FirstOrDefault();
        return attr != null ? attr.Description : value.ToString();
    }
}

还有一点LINQ

var enums = (DataType[])Enum.GetValues(typeof(DataType));
combo.Items.AddRange(enums.Select(x => x.Description()).ToArray());

然后你最终应该

Integer
Big Int
...

答案 1 :(得分:2)

public void UpdateComboBox(ComboBox cmbBox, Type t)
{
   foreach(string item in Enum.GetNames(t))
   {
       cmbBox.Items.Add(item);
   }
}

用法:

UpdateComboBox(comboBox1, typeof(DAO.DataTypeEnum));

答案 2 :(得分:1)

创建一个接收组合框作为参数的函数:

static void PopulateComboBox(ComboBox comboBox)
{
    comboBox.Items.Add(DAO.DataTypeEnum.dbInteger);
    comboBox.Items.Add(DAO.DataTypeEnum.dbBigInt);
    ....
}

这样称呼:

PopulateComboBox(comboBox1);
PopulateComboBox(comboBox2);
....

答案 3 :(得分:1)

如果您尝试枚举DAO.DataTypeEnum?:

public static void FillComboBox(ComboBox cb)
{
    cb.AddRange(Enum.GetValues(typeof(DAO.DataTypeEnum);
}

答案 4 :(得分:0)

将代码移动到接受ComboBox作为参数的方法中。

private void AddValues(ComboBox comboBox)
{
    comboBox.Items.Add(DAO.DataTypeEnum.dbInteger);
    comboBox.Items.Add(DAO.DataTypeEnum.dbBigInt);
    ...
    ...
}

然后使用AddValues(comboBox1);

调用它

您也可以为ComboBox设置显示值,您可以将其设置为绑定类的特定属性。我不确定您是否可以使用枚举值列表来执行此操作,但如果它们各自都有关联的描述,则可能会显示该值。