【问题标题】:Property editor for Encoding propertyEncoding 属性的属性编辑器
【发布时间】:2014-01-27 19:22:10
【问题描述】:

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

这是属性的声明:

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

它可以在属性网格中显示,但已禁用。我曾希望它能够开箱即用,因为 Encoding 是一种标准类型,例如 Font,标准编辑器会为此提供。

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

【问题讨论】:

  • 我知道它已经过时了,你肯定解决了它,我只是有点喜欢 UITypeEditors(除非我正在写一个,那么它们看起来很疯狂)并且正在阅读那些没有答案的。
  • 谢谢,我试试。现在,只要我能记得我在哪个项目中需要它就好了..

标签: c# encoding properties uitypeeditor


【解决方案1】:

该属性的禁用状态意味着 NET 无法找到该类型的匹配项,即System.Text.Encoding。由于那里还有您可能不想显示的其他属性(例如所有 Isxxxxxxx 道具),因此股票/默认编辑器可能无论如何都不会做您想要的。

一种方法是使用 TypeConverter,但对于这样的事情,仅将属性公开为枚举可能是一个优势:

  • 您可能不想支持 NET 类型中的所有可用选项
  • 如果需要,您可以使用不同的,也许更友好的名称/文字
  • 作为枚举 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; }
    }
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-29
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多