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

时间:2014-08-26 21:14:26

标签: c# winforms design-time

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

enter image description here

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

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

谁不理解我

在该图片(http://i.stack.imgur.com/NMank.png)中,“DataBase”是设计时Name的{​​{1}}。

值:PropertyNotChoseYETChooseDataBase是我创建的枚举值。

正如您所看到的那样,它们在设计中以ThereAlreadyDataBase显示,所以我想询问是否有其他方式可以在没有Enum的情况下显示?

3 个答案:

答案 0 :(得分:2)

<强>更新

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

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

  • 如果UITypeEditorProperty,设计师会在其中显示bool包含DropDownListTrue;

drop down list with 2 values

  • 如果FalseProperty,则在设计人员中,它会显示Font.Name DropDownList;

drop down list with small icon

  • 如果SmallIconProperty,设计师会在Color中显示部分 DropDownList

tab control encapsulates drop down list

从这些“原生”示例中,您可能会发现一个事实:在设计时,我们可以在TabControl中以某种方式使用除DropDownList之外的其他控件。例如,Property Tab属性提供Color而非简单TabControlDropDownList属性提供自定义Font.Name

是的,这是我要谈的第二件事。您不仅可以自定义DropDownList中的项目,还可以自定义DropDownList的{​​{1}}项。

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

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

Value Choosing Editor

  

向设计环境指示您的UI类型编辑器实现哪种用户界面

UITypeEditor

  

建立设计环境和用户界面之间的交互,以编辑您的自定义类型

然后,对于使用GetEditStyle()的您的媒体资源,您需要向其中添加EditValue(),以指定在选择该媒体资源的价值时使用的Editor

有关详细信息,建议您查看此MSDN walk-through,其中说明了如何在设计时设计自定义EditorAttribute

现在回到我们离开的地步。原始类型(如EditorValue 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);
     }
  }

这将产生以下形式:

enter image description here

答案 2 :(得分:0)

我遇到了这个问题,因为我最近需要做同样的事情。 我发布了一个问题......最后我自问了here

  

简而言之:实现类型转换器   GetStandardValuesSupported(ITypeDescriptorContext context)返回   返回true并返回GetStandardValues(ITypeDescriptorContext context)   属性类型的StandardValuesCollection。最后就是   像这样装饰房产:

[TypeConverter(typeof(MyClassConverter))]
public MyClass MyProperty { get; set; } 
     

设计器属性窗口现在有一个带有效值的下拉列表。