« 公開プロパティを隠す為の考察 | トップページ | 独自のプロパティエディタ作成(ダイアログボックス形式) »

2010年9月24日 (金)

プロパティエディタの指定

自作コントロールを作成した場合、一般的な組み込み型のプロパティなら、特に何もしなくてもプロパティウィンドウで普通に値の設定が出来ます。

ここでそれがファイル名の指定だったり、フォルダ名の指定のプロパティだった場合は、以下の様な記述で、それぞれコモンダイアログの「ファイルを開く」、「フォルダの参照」が表示されてます。

ファイル名指定の場合
[Editor(typeof(System.Windows.Forms.Design.FileNameEditor),
    typeof(System.Drawing.Design.UITypeEditor))]

フォルダ名指定の場合
[Editor(typeof(System.Windows.Forms.Design.FolderNameEditor),
    typeof(System.Drawing.Design.UITypeEditor))]

ここで、これらを指定しても、コンパイル時に以下の様なエラーメッセージが出るかもしれません。


これらは参照設定が必要ですが、参照の追加でそれぞれ"System.Design","System.Drawing"を指定する必要であります。名前空間とアセンブリの対応が普通と違う点に注意が必要です。

もっとも、設計時点で特定のファイル名やフォルダ名を指定する事が実際にあるのかは疑問ですが...

次に、StringCollection のプロパティがあった場合の話です。ちなみに、個人的には、StringCollection を結構使います。VS2003でも使えるからです。

さて本題の StringCollection プロパティの持つコントロールをフォームに貼り付け、プロパティウィンドウから、そのプロパティを選択すると、右側に"…"ボタンが出てきます。これをクリックすると、

この様なダイアログが出てきます。一見すると、そのまま文字列コレクションを入力出来そうです。しかし、実際に追加ボタンをクリックすると、

とエラーが出て、動作しません。
この事は、(旧)@IT会議室のInsider.NET「C# 文字列コレクションのプロパティの作り方について」で、触れられています。ここの回答で、以下の様な指定を行うと良いことが判りました。
※別の回答にある様な、文字列の配列プロパティにする手もあります。但しVS2003では、配列サイズを変えられない等制約もあって、代用出来るかはケースバイケースでしょう。

[Editor("System.Windows.Forms.Design.StringCollectionEditor, System.Design",
   typeof(System.Drawing.Design.UITypeEditor)),
   TypeConverter(typeof(CollectionConverter)),
   DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]

今度は、次の様な、「文字列コレクションエディタ」が開く様になります。

今度はちゃんとプロパティ設定が出来るようになります。これなら簡単に利用出来ます。

ここまでで使用したサンプルクラス定義/テストAPのプロジェクトをアップしておきます。

「Sample.cab」をダウンロード

最後に、最初にエラーとなった「String コレクションエディタ」を使えるようにする方法が、コードつきで解説されているページを紹介しておきます。

なんとなくやってみる > 文字列型コレクションエディタの作成
http://kz26.web.fc2.com/Note0008.html

« 公開プロパティを隠す為の考察 | トップページ | 独自のプロパティエディタ作成(ダイアログボックス形式) »

C# Tips」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: プロパティエディタの指定:

« 公開プロパティを隠す為の考察 | トップページ | 独自のプロパティエディタ作成(ダイアログボックス形式) »