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

PropertyGridのアイテムをクリック時にフォームを表示したい

分類:[.NET]

2010/11/09(Tue) 20:58:06 編集(投稿者)

  環境:WindowsXP
使用言語:C#、.NET Framework3.5

お世話になります。

PropertyGridに設定したアイテムのいづれかをクリックした際に、
別ウィンドウでフォームを開く等の動作をすることは可能でしょうか。

行ないたい処理の流れとしましては、
 1.PropertyGridに「編集」のボタンやラベルを表示
 2.上記ボタンやラベルをクリックしたタイミング別モーダルフォームをオープン
 3.別モーダルフォームの情報をPropertyGridの項目に反映

PropertyGridコントロール全体のクリックイベントではなく、
アイテムのクリックイベント等がハンドリングできればできそうかと思っているのですが、
どのようにすれば可能そうかがわかっておりません。
(CollectionEditorをカスタムしてプロパティに属性をつけたりする?)

ご教示の程、よろしくお願い致します。
CollectionEditor というか、UITypeEditor を派生させたクラスを作り、プロパティの Editor 属性に設定します。
具体的には UITypeEditor でネットを検索すれば見つかるでしょう。
Hongliang様

お世話になります。
ご教示頂いたキーワードで調べて、無事行ないたい動作を実現できました。

ご返信遅くなって申し訳ございません。
ありがとうございました。

下記は実際に行なったコードをサンプルとして記載しておきます。

■属性
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing.Design;
using System.Windows.Forms;

namespace WindowsFormsApplication1 {
  class PropertyGridEditorAttribute {

    /// <summary>
    /// エディタ スタイルを取得します。
    /// </summary>
    /// <param name="context"></param>
    /// <returns></returns>
    public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) {

      // 入力項目の編集スタイルにボタンを配置
       return UITypeEditorEditStyle.Modal;
    }

    /// <summary>
    /// 値を編集するためのユーザー インターフェイスを起動します。
    /// </summary>
    /// <param name="context"></param>
    /// <param name="provider"></param>
    /// <param name="value"></param>
    /// <returns></returns>
    public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) {

      // 引数valueはプロパティに入っている値

      Form form = new Form();
      form.ShowDialog();

      return "返したい値";
    }
  }
}

■使い方
// プロパティに属性を付与
[Editor(typeof(FunctionStringEditorAttribute), typeof(UITypeEditor))]
public string Text { get; set; }
解決済み!

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