2014-02-11 84 views
0

我對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個組合框,我想,而不是寫這一切對每個組合框,我可以做一個功能,但無法弄清楚如何做到這一點。有沒有辦法改變名字?例如,當我下拉框顯示:dbInteger,dbBigInt?我可以改變它們來顯示Integer,Big Integer嗎?先謝謝你。

+0

如何定義你的枚舉?你想覆蓋枚舉中的每個*值嗎? –

回答

1

創建接收組合框中作爲參數的函數:

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

這樣稱呼它:

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

你可以在一行中做到這一點

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 
... 
+0

作爲一個魅力工作(:非常感謝你。現在有沒有辦法改變項目的名稱? – user3297659

+0

哦,是的,我剛看到它,但我得到一個擴展方法的錯誤: var attrs =(描述屬性)typeof(T).GetCustomAttributes(typeof(DescriptionAttribute),false); 說:無法將類型'object []'轉換爲System.ComponentModel.DescriptionAttribute' – user3297659

+0

嗯,現在我得到attr。描述 - 對象不包含「描述」的defenition,也沒有接受類型'object'的第一個參數的擴展方法'Description':(我想我會離開它而不更改名稱 – user3297659

0

結束了移動代碼到接受的方法一個ComboBox作爲參數。

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

然後調用它使用AddValues(comboBox1);


您可以設置組合框的顯示值太大,你可以設置爲您結合類的特定屬性。我不確定你可以使用枚舉值列表來做到這一點,但是如果它們每個都有關聯的描述,那麼你可以改爲顯示該值。

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

用法:

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

如果試圖枚舉DAO.DataTypeEnum?:

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

你應該真的只需在這裏使用'AddRange',看看我的答案。 – James