11

getter と setter の両方を持つ文字列プロパティを持つクラスがありますが、これはしばしば非常に長く、PropertyGrid が文字列値を切り捨てます。PropertyGrid に省略記号を表示させ、プロパティを簡単に編集できるように複数行のテキスト ボックスを含むダイアログを起動するにはどうすればよいですか? おそらくプロパティに何らかの属性を設定する必要があることはわかっていますが、どの属性をどのように設定するのでしょうか? 私のダイアログは特別なデザイナー インターフェイスを実装する必要がありますか?

更新: これはおそらく私の質問に対する回答ですが、検索しても見つかりませんでした。私の質問はより一般的であり、その答えはあらゆるタイプのカスタム エディターの構築に使用できます。

4

1 に答える 1

20

[Editor(...)]プロパティにを設定UITypeEditorして、編集を行う を指定する必要があります。そのように(あなた自身のエディタで...)

using System;
using System.ComponentModel;
using System.Drawing.Design;
using System.Windows.Forms;
using System.Windows.Forms.Design;


static class Program
{
    static void Main()
    {
        Application.Run(new Form { Controls = { new PropertyGrid { SelectedObject = new Foo() } } });
    }
}



class Foo
{
    [Editor(typeof(StringEditor), typeof(UITypeEditor))]
    public string Bar { get; set; }
}

class StringEditor : UITypeEditor
{
    public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
    {
        return UITypeEditorEditStyle.Modal;
    }
    public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
    {
        IWindowsFormsEditorService svc = (IWindowsFormsEditorService)
            provider.GetService(typeof(IWindowsFormsEditorService));
        if (svc != null)
        {
            svc.ShowDialog(new Form());
            // update etc
        }
        return value;
    }
}

必要に応じて動作する既存のプロパティを調べることで、既存のエディターを追跡できる場合があります。

于 2008-12-11T15:35:25.883 に答える