我知道当我使用Enum
并将其作为Property
用于class / UserControl时,它会显示/显示下拉列表,如下所示:
但这是显示“下拉列表”等可用值的唯一方法吗?我们还有其他办法吗?
编辑:范围是Windows窗体应用程序
谁不理解我
在该图片(http://i.stack.imgur.com/NMank.png)中,“DataBase”是设计时Name
的{{1}}。
值:Property
,NotChoseYET
,ChooseDataBase
是我创建的枚举值。
正如您所看到的那样,它们在设计中以ThereAlreadyDataBase
显示,所以我想询问是否有其他方式可以在没有Enum的情况下显示?
答案 0 :(得分:2)
<强>更新强>
经过大量搜索后,我发现我所回答的内容只是部分正确,所以我想再次回答。
您的问题的答案是明确的否,我们还有其他一些方法可以将属性值显示为DropDownList
。就像我在旧答案中提到的那样,如果值来自某种Set
,或者换句话说它属于值集合,它将显示为{{1 没有任何额外的努力(因为已经为它们指定了DropDownList
,稍后您将理解这一点)。以下是3个例子:
UITypeEditor
是Property
,设计师会在其中显示bool
包含DropDownList
和True
;
False
是Property
,则在设计人员中,它会显示Font.Name
DropDownList
;
SmallIcon
是Property
,设计师会在Color
中显示部分 DropDownList
。
从这些“原生”示例中,您可能会发现一个事实:在设计时,我们可以在TabControl
中以某种方式使用除DropDownList
之外的其他控件。例如,Property Tab
属性提供Color
而非简单TabControl
,DropDownList
属性提供自定义Font.Name
。
是的,这是我要谈的第二件事。您不仅可以自定义DropDownList
中的项目,还可以自定义DropDownList
的{{1}}项。
然而,这是非常棘手且非平凡。除非它在设计时真正为用户控件增加价值,否则不建议这样做。
简而言之,您需要继承View
,并覆盖2个函数:
Value Choosing Editor
,
向设计环境指示您的UI类型编辑器实现哪种用户界面
和UITypeEditor
,
建立设计环境和用户界面之间的交互,以编辑您的自定义类型
然后,对于使用GetEditStyle()
的您的媒体资源,您需要向其中添加EditValue()
,以指定在选择该媒体资源的价值时使用的Editor
。
有关详细信息,建议您查看此MSDN walk-through,其中说明了如何在设计时设计自定义EditorAttribute
。
现在回到我们离开的地步。原始类型(如Editor
和Value Editor
)已经绑定
一个bool
,因此不应该进一步工作。
旧答案:
对于属性,您需要从某种Color
中选择一个值,UITypeEditor
中的所有元素在设计过程中都会在Set
中显示为Set
时间。当您尝试定义Items
时,DropDownList
是一种定义它们的方法。此外,您可以使用Set
,例如Enum
。换句话说,如果您有set of struct
返回Color
(或其他结构),则在设计时它会显示为下拉列表。
答案 1 :(得分:0)
您可以使用.Items属性轻松地将项目添加到组合框控件:
private void TestForm_Load(object sender, EventArgs e)
{
for (int i = 0; i < 10; i++)
{
// add items to the combobox
// you can use any object. The .ToString() method will be used for displaying it
cbxTest.Items.Add("This is test string " + i);
}
}
这将产生以下形式:
答案 2 :(得分:0)
我遇到了这个问题,因为我最近需要做同样的事情。 我发布了一个问题......最后我自问了here。
简而言之:实现类型转换器
GetStandardValuesSupported(ITypeDescriptorContext context)
返回 返回true并返回GetStandardValues(ITypeDescriptorContext context)
属性类型的StandardValuesCollection
。最后就是 像这样装饰房产:[TypeConverter(typeof(MyClassConverter))] public MyClass MyProperty { get; set; }
设计器属性窗口现在有一个带有效值的下拉列表。