c# - 枚举是在设计时将属性值显示为下拉列表的唯一方法吗

标签 c# winforms design-time

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

enter image description here

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

编辑:范围是Windows窗体应用

对于那些不理解我的人

在该图像 ( http://i.stack.imgur.com/NMank.png ) 中,“DataBase” 是设计时 PropertyName

值:NotChoseYETChooseDataBaseThereAlreadyDataBase 是我创建的 Enum 中的值。

如您所见,它们在设计中显示在 DropDownList 中,所以我想问一下是否有其他不使用 Enum 的显示方式?

最佳答案

更新

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

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

  • 如果 Property 是一个 bool,在设计器中它会显示一个 DropDownList 包含 True错误;

drop down list with 2 values

  • 如果 PropertyFont.Name,在设计器中它会显示一个带有 SmallIconDropDownList >;

drop down list with small icon

  • 如果 PropertyColor,在设计器中它会向您展示封装在TabControl.

tab control encapsulates drop down list

从那些“原生”示例中,您可能会意识到一个事实:在设计期间,我们可以以某种方式使用 Property Tab 中的简单 DropDownList 以外的一些控件。例如,Color 属性提供 TabControl 而不是简单的 DropDownListFont.Name 属性提供自定义的 DropDownList

是的,这就是我要讲的第二件事。您不仅可以自定义 DropDownList 中的项目,还可以自定义 Value Choosing EditorView

但是,这非常棘手且不简单。不建议您这样做,除非它确实在设计时为您的用户控件增加了值(value)。

简而言之,您需要继承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

然后对于使用 Editor 的属性,您需要向其添加 EditorAttribute 以指定选择值时使用的 Editor该属性(property)的。

更多详细信息,建议您查看此MSDN walk-through ,其中解释了如何在设计时设计自定义的 Value Editor

现在回到我们离开的地方。 native 类型,如 boolColor,已经绑定(bind)到 UITypeEditor,因此不需要做进一步的工作。


旧答案:

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

关于c# - 枚举是在设计时将属性值显示为下拉列表的唯一方法吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25515238/

相关文章:

c# - 如何仅在需要时提升权限?

c# - 如何更改组合框中的项目?

c# - 字符串和最后一位数字之间的正则表达式匹配

.net - 如何允许在 WinForm PropertyGrid 中编辑 “flag” 枚举?

.net - 设计时反射

c# - 用于泛型类型层次结构的 DebuggerTypeProxy

c# - 在 C# 中调用 DrawRectangle 方法时如何使用 XOR 模式

c# - System.Windows.Forms.Timer 是否在与 UI 不同的线程上运行?

c# - UserControl - 将值设置为属性