PropertyGrid に特定のプロパティのカスタム ダイアログを強制的に表示するにはどうすればよいですか?
-
21-08-2019 - |
質問
ゲッターとセッターの両方を持つ文字列プロパティを持つクラスがありますが、多くの場合長すぎるため、PropertyGrid によって文字列値が切り捨てられます。PropertyGrid に省略記号を表示させて、プロパティを簡単に編集できるように複数行のテキスト ボックスを含むダイアログを起動するにはどうすればよいですか?おそらくプロパティに何らかの属性を設定する必要があることはわかっていますが、どのような属性をどのように設定するのでしょうか?ダイアログには特別なデザイナー インターフェイスを実装する必要がありますか?
アップデート: これ おそらく私の質問に対する答えだと思いますが、検索しても見つかりませんでした。私の質問はより一般的なもので、その答えはあらゆる種類のカスタム エディターの構築に使用できます。
解決
設定する必要があります [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;
}
}
希望どおりに動作する既存のプロパティを確認することで、既存のエディターを簡単に追跡できる場合があります。
所属していません StackOverflow