PropertyGrid中的列舉顯示為中文

2021-05-28 06:33:36 字數 3258 閱讀 8159

propertygrid中的列舉顯示為中文

在系統開發中,經常會使用propertygrid來修改或者展示某個物件的屬性,如果類中定義了列舉,在展現的時候缺省會展示列舉的項或者列舉值,但是這並不是我們想要的。使用者使用的時候並不清楚該項代表的意思。之前介紹過列舉顯示中文的一篇文章,大家可以看下,列舉顯示中文。

效果如下圖:

在propertygrid中列舉顯示中,又比較複雜一些。propertygrid顯示複雜屬性需要typeconverter,也就是乙個轉換器,可以對其進行設定,顯示我們想要的格式、內容。現有技術propertygrid列舉顯示中文,有一些利用了繫結自定義控制項,有一些繫結自定義的ilist物件。但是,每個列舉都要建立自己的typeconverter,如果在架構設計中,一般都是分層實現,這樣的橫跨直接影響了分層結構,破壞系統的原本。有沒有一種更好的辦法來實現呢?本文也就這一問題進行了研究。

在typeconverter中對列舉型別進行轉換,但是這個typeconverter針對的所有的列舉物件,所有的列舉轉換器都可以採用此介面,在列舉顯示的時候呼叫typeconverter,通過反射獲得相對應的列舉描述。這樣所有的列舉就只定義乙個typeconverter。也就解決上述問題。

具體事例:

1、定義列舉:在列舉中加入描述資訊,作為我們需要顯示的資訊

public enum pkgenerator

}

2、定義typeconverter,對列舉和選擇進行轉換

/// /// 列舉轉換器

/// 用此類之前,必須保證在列舉項中定義了description

///

public class enumconverter : expandableobjectconverter

/// /// 載入列舉項集合

///

///

private void loaddic(itypedescriptorcontext context)

/// /// 是否可從**轉換

///

///

///

///

public override bool canconvertfrom(itypedescriptorcontext context, type sourcetype)

/// /// 從**轉換

///

///

///

///

///

public override object convertfrom(itypedescriptorcontext context, system.globalization.cultureinfo culture, object value)}}

}}return base.convertfrom(context, culture, value);

}/// /// 是否可轉換

///

///

///

///

public override bool canconvertto(itypedescriptorcontext context, type destinationtype)

/// ///

///

///

///

public override bool getstandardvaluessupported(itypedescriptorcontext context)

/// ///

///

///

///

public override bool getstandardvalue***clusive(itypedescriptorcontext context)

/// ///

///

///

///

public override standardvaluescollection getstandardvalues(itypedescriptorcontext context)

/// ///

///

///

///

///

///

///

public override object convertto(itypedescriptorcontext context, system.globalization.cultureinfo culture, object value, type destinationtype)

//}//return "error!";

//繫結控制項

// fieldinfo fieldinfo = value.gettype().getfield(value.tostring());

//object objs = fieldinfo.getcustomattributes(typeof(system.componentmodel.descriptionattribute), false);

//if (objs == null || objs.length == 0)

////else

//if (dic.count <= 0)

loaddic(context);

foreach (object key in dic.keys)

}return base.convertto(context, culture, value, destinationtype);

}/// /// 記載列舉的值+描述

///

///

///

public dictionarygetenumvaluedesdic(type enumtype)}}

return dic;}}

3、屬性使用typeconverter:

public class entitykey

}

具體效果如下圖:

PropertyGrid中的屬性讀取

public class basesettings settingfilename is a file whose extension is xml private string settingfilename else xml name public basesettings string set...

WPF中實現PropertyGrid的三種方式

由於wpf中沒有提供propertygrid控制項,有些業務需要此類的控制項。這篇文章介紹在wpf中實現propertygrid的三種方式,三種方式都是俺平時使用時總結出來的。第一種方式 使用windowsform的propertygrid控制項。用過wpf的童鞋都曉得,可以通過windowsfor...

PropertyGrid 繫結動態的屬性與值的集合

建立下面3個類 xprop 就是使用者將具體使用的屬性。propertygrid 很炫的一點就是屬性的定製可以有很大的自由度。在這裡,給出一種最最簡單的形式,屬性包括 name 和 value 兩個部分,在 propertygrid 的屬性視窗中,name 將代表左邊的屬性名稱,value 將代表右...