2015-02-24 64 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