2015-02-24 67 views
0

說我有以下枚舉:填充控制從一個枚舉

Public Enum TimeUnit 
    Day 
    Week 
    Month 
    Year 
End Enum 

有什麼辦法,我可以使用此枚舉來填充組合框或列表框?理想情況下,我希望控件將內部表示作爲插入值回顯(即Day,而不是0)。


如果有一個更好的方式去關心這個(CF「X/Y問題」),我的基本要求是,我必須能夠使用TimeUnit類似枚舉,即作爲一個類型在自身。我也想真的喜歡避免在代碼中重複自己。

+0

請注意,I * do *表示VB6,而不是VB.NET。 :-) – 2015-02-24 16:46:35

+1

你不想這樣做。如果您嘗試爲枚舉成員使用「友好」UI命名,則會遇到保留字碰撞或超載半保留字,並且通常會在您的手中混亂。 ''日''和上面顯示的其餘部分已經有了意義,所以通常會命名爲'tuDay',無論如何都是爲了避免名稱空間衝突。 – Bob77 2015-02-24 17:20:38

+0

@ Bob77不夠公平。如果您提出了一種替代方法,我會適當修改問題以便就基本問題提出問題。我真的不明白這樣做的好方法。 (至少,不是用我掌握的語言的知識:我仍在訓練中。) – 2015-02-24 17:23:31

回答

1

我假設你想使用枚舉作爲值傳遞給某些方法。您可以將枚舉值分配給ItemData屬性,並將文字值賦予項目(用戶看到的文本)。我建議使用Bob77的命名約定並編寫一個方法來填充組合框或列表框控件。像下面的東西應該工作。

Private Sub LoadCombo() 

    Combo1.Clear 
    Combo1.AddItem "Day" 
    Combo1.ItemData(Combo1.NewIndex) = TimeUnit.Day 
    Combo1.AddItem "Week" 
    Combo1.ItemData(Combo1.NewIndex) = TimeUnit.Week 
    Combo1.AddItem "Month" 
    Combo1.ItemData(Combo1.NewIndex) = TimeUnit.Month 
    Combo1.AddItem "Year" 
    Combo1.ItemData(Combo1.NewIndex) = TimeUnit.Year 

End Sub 

Private Sub Combo1_Click() 

    MsgBox "You have selected " & Combo1.Text & " (" & CStr(Combo1.ItemData(Combo1.ListIndex)) & ")" 

End Sub 
+0

不知道爲什麼這些「浮動元素」在那裏(IDE插入一個空格,試圖告訴你不要使用它們一個方法調用)。但是我不確定是否有比這更好的答案,特別是如果Enum值可能不連續或者以非零值開始。 – Bob77 2015-02-24 18:53:21

+0

@ Bob77您對關於parens的說法是正確的。 C#太多年了。儘管我會將它們從答案中刪除,但它們確實有效。 – jac 2015-02-24 19:01:15

+1

謝謝,我希望你不要在每個人面前貼一個'Call'關鍵字。 ;) – Bob77 2015-02-24 19:25:25