C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: Color 型プロパティの EditorAttribute


(過去ログ 104 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■61704 / inTopicNo.1)  Color 型プロパティの EditorAttribute
  
□投稿者/ Ruku (4回)-(2011/08/29(Mon) 16:02:35)

分類:[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();

引用返信 編集キー/
■61705 / inTopicNo.2)  Re[1]: Color 型プロパティの EditorAttribute
□投稿者/ shu (962回)-(2011/08/29(Mon) 17:08:49)
No61704 (Ruku さん) に返信

EditValueにて
provider.GetService
を実行する必要がありそう。

http://acha-ya.cocolog-nifty.com/blog/2010/09/post-03f1.html
引用返信 編集キー/
■61707 / inTopicNo.3)  Re[2]: Color 型プロパティの EditorAttribute
□投稿者/ Ruku (5回)-(2011/08/29(Mon) 18:19:33)
No61705 (shu さん) に返信
> ■No61704 (Ruku さん) に返信
>
> EditValueにて
> provider.GetService
> を実行する必要がありそう。
>
> http://acha-ya.cocolog-nifty.com/blog/2010/09/post-03f1.html

ありがとうございます。
さっそく試してみました……が、何だかそれ以前の問題のようです。

break を仕掛けて実行してみても、EditValue に入ってきません。
試しにプロパティの型を object 型にしたところ、ColorDialog が表示されました。

EditorAttribute 属性を正しく上書きできていないようです。

# ちなみに、提示していただいたリンク先を参照して、
# IWindowsFormsEditorService.ShowDialog を利用しようと思ったら、
# 引数の型が Form で ColorDialog は渡せませんでした;;
# ColorDialog.ShowDialog で表示できました。(owner 指定なし)

引き続き、よろしくお願いします。
引用返信 編集キー/
■61855 / inTopicNo.4)  Re[3]: Color 型プロパティの EditorAttribute
□投稿者/ Ruku (6回)-(2011/09/08(Thu) 20:06:10)
2011/09/08(Thu) 20:07:38 編集(投稿者)

自己解決しました。

ColorConverter が標準値のリストを持っているのが原因だったようです。
継承したクラスを作成することで解決しました。

ありがとうございました。

# 継承したメソッドを書いたらスパム判定されたため、削りました。



# 解決済み 付け忘れたため編集。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -