|
分類:[C#]
System.Drawing.Color 型のプロパティを持つクラスを作成します。
このクラスを PropertyGrid コントロールに設定 (SelectedObject プロパティ) すると、
既定のエディタで編集することができます。
これを、標準のカラー ダイアログで編集できるようにしたいため、UITypeEditor から派生するクラスを作成しました。
この作成したクラスを、該当プロパティの EditorAttribute に指定したところ意図した動作になりません。
# 既定のエディタから WebColor のタブだけ抜き出した感じ? が表示される。
# 作成したクラスの EditValue メソッドが実行されている様子はありません。
他に設定すべき属性 (か何か) があるでしょうか。
よろしくお願いします。
# 以下ミニマムコードです。
public class ColorDialogEditor : UITypeEditor
{
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
{
// 呼ばれている形跡なし。
using (var dialog = new ColorDialog()) {
dialog.Color = (Color)value;
var result = dialog.ShowDialog();
if (result == DialogResult.OK) {
return dialog.Color;
}
}
return value;
}
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.Modal;
}
}
public class Hoge
{
[Editor(typeof(ColorDialogEditor), typeof(UITypeEditor))]
public Color TestColor { get; set; }
}
PropertyGrid を配置したフォーム上のどこかで、
propertyGrid1.SelectedObject = new Hoge();
|