DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ユーザーコントロールにてPropertyGridに[...]を表示し、設定フォームを開きたい

環境/言語:[VB.net]
分類:[.NET]

お世話になります。

タイトルの通り、
ユーザーコントロールにてPropertyGridに[...]を表示し、設定フォームを開きたいのですが可能でしょうか?

フォント設定画面のようなイメージです。

ユーザコントロールは作成済みで色々調べたのですが、設定画面が出せずにいます。
お知恵をお貸しください。m(_ _)m
> タイトルの通り、
> ユーザーコントロールにてPropertyGridに[...]を表示し、設定フォームを開きたいのですが可能でしょうか?

UITypeEditorクラスの派生クラスを作成し、GetEditStyleとEditValueメソッドをオーバーライドすれば可能でしょう。GetEditStyleではUITypeEditorEditStyle.Modalを返すようにし、EditValueでダイアログを表示します。

次のようなコードで試したところ、うまくいきました。省略されている部分がありますが、お分かりいただけるでしょう。

public class MyTypeEditor : System.Drawing.Design.UITypeEditor
{
public override System.Drawing.Design.UITypeEditorEditStyle
GetEditStyle(ITypeDescriptorContext context)
{
if (context != null && context.Instance != null)
return System.Drawing.Design.UITypeEditorEditStyle.Modal;
else
return base.GetEditStyle(context);
}

public override object EditValue(
ITypeDescriptorContext context,
IServiceProvider provider,
object value)
{
System.Windows.Forms.Design.IWindowsFormsEditorService es =
(System.Windows.Forms.Design.IWindowsFormsEditorService)
provider.GetService(
typeof(System.Windows.Forms.Design.IWindowsFormsEditorService));
Form2 dlg = new Form2();
dlg.TextBox1.Text = ((MyType)value).Text;
if (es.ShowDialog(dlg) == DialogResult.OK)
{
MyType obj = new MyType();
obj.Text = dlg.TextBox1.Text;
return obj;
}
return value;
}
}

[Editor(typeof(MyTypeEditor),
typeof(System.Drawing.Design.UITypeEditor))]
public class MyType
{
public string Text = "";
}
■No17428に返信(管理人さんの記事)
ご丁寧な回答ありがとうございます。
試してみます!!
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板