c# - ComboBox 绑定(bind)到枚举类型的值,同时还具有 "blank"条目?

标签 c# .net winforms combobox enums

如果我将 WinForms ComboBox 绑定(bind)到枚举类型的值,即

combo1.DropDownStyle = ComboBoxStyle.DropDownList;
combo1.DataSource = Enum.GetValues(typeof(myEnumType));

谁知道我怎么能达到相同的结果,而除了匹配每个枚举值的条目外,我还可以有一个表示没有选择的空白条目?

我不能简单地向枚举类型添加特殊值,因为这必须灵活地处理任何枚举类型。

非常感谢您的帮助。

编辑: 我应该明确表示我想绑定(bind)实际的枚举值而不是它们的名称。如果绑定(bind)了实际的枚举值,则 ComboBox 负责调用它们的 ToString() 以获取要显示的文本。

最佳答案

不确定你们是否已经尝试过您发布的所有代码,但是您不能通过数据绑定(bind) ComboBox 添加项目。这是 winforms,不是 WPF,所以没有“DataBind”功能。

你可以这样做:

public static string[] GetEnumValues<T>(bool includeBlank) 
{
    List<string> values = new List<string>((Enum.GetValues(typeof(T)) as T[]).Select(t => t.ToString()));

    if (includeBlank)
    {
        values.Insert(0, string.Empty);
    }

    return values.ToArray();
}

然后

combo.DataSource = GetEnumValues<myEnumType>(true);

关于c# - ComboBox 绑定(bind)到枚举类型的值,同时还具有 "blank"条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/807030/

相关文章:

c# - 如何在 Windows 窗体中获取窗体的所有控件?

C# 从多个应用程序读取/写入文件

c# - 无法确定类型之间关联的主体端

c# - 如何确定组合框是否包含值成员?

c# - 如何以编程方式创建包含多个项目的解决方案?

c# - 在时间范围内对获取项目进行分组

c# - .NET 的 Python 在调用 System.Windows.Forms.Form 构造函数时静默失败

c# - 为什么 Application.LocalUserAppDataPath 抛出 InvalidDeploymentException "Application identity is not set."

c# - 正则表达式不匹配数字后跟某个字符

c# - Visual Studio 2012 如何绘制其窗口边框?