|
分類:[.NET 全般]
いつもお世話になっております。
質問するつもりで来たはずが、回答して忘れてました^^;
環境:VS2008(またはVS2010)/ C# / Windows7
相変わらずPropertyGridで結構大きいオブジェクトの表示をしております。
そこで、bool値の挙動と、自分で表示しているenumの挙動が異なることに気づきました。
必須な事柄ではないのですが、もしご存知の方がいらっしゃいましたら、お願い致します。
何のことか?という話なのですが、
bool値をメンバに持つクラスのインスタンスをSelectedObjectに割り当てた場合、
そのGridをダブルクリックした時に、値が反転するのです。(true→false,false→true)
また、項目選択後に十字キーの上下を押すことでも値が変わります。
これが、bool値の代わりに自作のenumを割り当てた場合、
同様の動作が全く行えません。
なお、enum値の表現はTypeConverterを使用しておりまして、
かつSystem.Drawing.Design.UITypeEditorも使用し、
UITypeEditorEditStyle.DropDownを指定しています。
おそらく、TypeConverterかUITypeEditorで、何か定義すればいけそうな気がするのですが、
何が足りなくてこうなっているのかわかりません。
どなたかご存知でしょうか?
サンプルコードは下記の通りです。
public enum SomeEnum
{
SOMEENUM_FALSE = 0,
SOMEENUM_TRUE = 1,
}
public class SomeEditor : System.Drawing.Design.UITypeEditor
{
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.DropDown;
}
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
{
//実際はListBoxを表示して、選択した文字列によってSomeEnum.SOMEENUM_FALSEかSomeEnum.SOMEENUM_TRUEを返してます
return value;
}
}
public class SomeConverter : ExpandableObjectConverter
{
//CanConvertTo,ConvertTo,CanConvertFrom,ConvertFrom,GetPropertiesのみ実装
}
public class SomeClass
{
private bool bBoolParam = false;
private SomeEnum eEnumParam = SomeEnum.SOMEENUM_FALSE;
public SomeClass(){}
public bool BoolParam
{
set { bBoolParam = value; }
get { return bBoolParam; }
}
[TypeConverter(typeof(SomeConverter))]
[EditorAttribute(typeof(SomeEditor), typeof(System.Drawing.Design.UITypeEditor))]
public SomeEnum EnumParam
{
set { eEnumParam = value; }
get { return eEnumParam; }
}
}
//FormのLoadイベントあたりで
PropertyGrid clsSomeGrid = new PropertyGrid();
clsSomeGrid.SelectedObject = new SomeClass();
|