【问题标题】:How to create Public String property with drop-down list of options?如何使用下拉选项列表创建公共字符串属性?
【发布时间】:2009-09-26 00:41:30
【问题描述】:

是否可以将字符串列表附加到字符串属性,以便用户可以从“属性”窗口中选择其中一个字符串?我应该实现 ICollection 还是类似的东西?

【问题讨论】:

  • 还有一个问题:我有什么办法可以在将 TypeConverter 构造函数用作属性时将参数传递给它?我希望能够使用此属性来使用用户提供的 List 在任何类中创建字符串下拉列表属性。因此仅设置默认字符串列表是行不通的在 TypeConverter 类中。
  • 您应该在此处将某事标记为答案,然后提出一个新问题,因为这是一个新话题。

标签: c# string properties collections


【解决方案1】:

如果您试图将属性限制为几个特定选项之一,则应为该属性使用 Enum 而不是 String。

如果您想提供默认值,但让他们输入任何字符串并忽略默认值,那么您可以使用 StringConverter。详情请阅读Getting the Most Out of the .NET Property Grid control。它涵盖了这个确切的场景。

【讨论】:

  • 我检查了该链接,但它似乎告诉您如何为 PropertyGrid 对象执行此操作 - 我无法在我的设计时属性窗口中使用它。我发现的一切似乎都是针对 PropertyGrid 控件的——在设计时有没有办法做到这一点?
  • 那是一回事。设计时属性窗口是一个 PropertyGrid 控件 - 如果您按照它所描述的方式进行操作,它将在设计时以这种方式显示。
  • 谢谢你这个工作......我不小心在我的属性中输入了错误的类型(有 StringConverter 但我的类名是 ColumnStringConverter,所以它不起作用)。
  • 如果人们真的回答了这个问题,而不是告诉我们应该怎么做,那就太好了。将属性作为枚举而不是字符串并不总是有效。以 HyperLink 类的 Target 属性为例。它(必然)是一个字符串,但在设计模式下它有一个预定义的选项列表,例如“_blank”、“_parent”等
【解决方案2】:

没有。您应该使用您的字符串选择创建一个enum 类型,并创建该类型的属性。示例:

public enum Choices
{
    NiceChoice,
    PoorChoice
}

public class Chooser
{
    public Choices Choice { get; set; }
}

【讨论】:

  • 我不能使用枚举,因为列表是动态生成的。基本上,当用户为 DataGridView 设置数据源时,该属性将读取列名并使用这些名称填充列表。然后,用户将能够选择他们想要过滤的列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-31
  • 2021-01-03
相关资源
最近更新 更多