Encoding属性的属性编辑器

时间:2014-01-27 19:22:11

标签: c# encoding properties uitypeeditor

我正在实现一个自定义TextBox,并希望它的新编码属性可以在设计器中编辑。

以下是该财产的声明:

    private Encoding tbEnc;
    public Encoding tbEncoding { get { return tbEnc; } set { tbEnc = value; } }

它在属性网格中显示正常但已禁用。我希望它可以开箱即用,因为Encoding是一种标准类型,比如Font,标准编辑器出现了。

我是否必须构建一个UITypeEditor以及最简单的实现?

1 个答案:

答案 0 :(得分:2)

属性上的禁用状态意味着NET无法找到Type的匹配项,即System.Text.Encoding。由于还有其他属性,你可能不想显示(就像所有Isxxxxxxx道具一样),股票/默认编辑器可能不会做你想要的。

一种方法是使用TypeConverter但是对于类似的东西,只是将属性暴露为枚举可能是一个优势:

  • 您可能不希望支持NET类型
  • 中提供的所有选项
  • 如果需要,您可以使用不同的,可能更友好的名字/文字
  • 因为enum NET将使用下拉列表,因此您无需编写任何内容

class newTB : TextBox
{
    // encoding subset to implement
    public enum NewTBEncoding
    {
        ASCII, UTF8, UTF7
    };

    // prop as enum
    private NewTBEncoding tbEnc;

    public NewTBEncoding tbEncoding { 
        get { return tbEnc; } 
        set {tbEnc = value; }
    }
}

您有时必须从枚举值转换为实际的基础类型,但这通常是您可以在属性设置器中执行的一次性操作,或者只是在使用时。结果:

http://i.imgur.com/fVKXbjl.jpg