c# – Enum是在设计时将属性显示为下拉列表的唯一方法

我知道当我使用Enum并将其作为class / UserControl的Property时,它会显示/显示下拉列表,如下所示:

但这是显示“下拉列表”等可用值的唯一方法吗?我们还有其他办法吗?

编辑:范围是Windows窗体应用程序

对于谁不理解我

在该图像(http://i.stack.imgur.com/NMank.png)中,写入“DataBase”是设计时属性的名称.

值:NotChoseYET,ChooseDataBase,ThereAlreadyDataBase是我创建的Enum中的值.

正如你所看到的那样,它们显示在设计中的DropDownList中,所以我想问一下,如果没有Enum,还有其他方式可以显示吗?

最佳答案 更新

经过大量的搜索,我发现我所回答的只是部分正确,所以我想再次回答.

你的问题的答案肯定是NO,我们还有其他一些方法可以将属性值显示为DropDownList.就像我在旧答案中提到的那样,如果值来自某种Set,或者换句话说它属于一个值集合,它将显示为DropDownList而不需要任何额外的努力(因为已经为它们指定了UITypeEditor) ,你稍后会明白这一点).以下是3个例子:

>如果属性是bool,在设计器中它将显示DropDownList包含True和False;

>如果属性是Font.Name,在设计器中它将显示带有SmallIcon的DropDownList;

>如果属性是一个Color,在设计器中它将显示一些封装在TabControl中的DropDownList.

从这些“本机”示例中,您可能会意识到这样一个事实:在设计时,我们可以以某种方式使用属性选项卡中的简单DropDownList之外的一些控件.例如,Color属性提供TabControl而不是简单的DropDownList,Font.Name属性提供自定义的DropDownList.

是的,这是我要谈的第二件事.您不仅可以自定义DropDownList中的项目,还可以自定义该值选择编辑器的视图.

然而,这是非常棘手和非平凡的.除非它在设计时真正为用户控件增加价值,否则不建议您这样做.

简而言之,您需要从UITypeEditor继承,并覆盖2个函数:

GetEditStyle(),哪个

indicates to the design environment which kind of user interface your UI type editor implements

和EditValue(),其中

establishes the interaction between the design environment and the user interface for editing your custom type

然后,对于使用编辑器的属性,需要向其添加EditorAttribute以指定在选择该属性的值时使用的编辑器.

有关更多详细信息,建议您查看此MSDN walk-through,其中说明了如何在设计时设计自定义值编辑器.

现在回到我们离开的地步.原生类型,如bool和Color,已经与之结合
一个UITypeEditor,因此不应该进一步工作.

旧答案:

对于属性,您需要从一种Set中选择一个值,该Set中的所有元素将在设计时显示为DropDownList中的Items.当您尝试定义Set时,Enum是一种定义它们的方法.此外,您可以使用结构集,如Color.换句话说,如果您有一个返回Color(或其他结构)的Property,则在设计时它将显示为下拉列表.

点赞