- - PR -
Enum型の複合プロパティ
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-06-12 21:47
はじめまして。
いつも参考にさせて頂いてます。 VS2005、C#、WindowsForms のカスタムコントロールで、 Enum型の複合(連動)プロパティを実装したいと思っています。 具体的には、次の事を実現したいと思っています。 プロパティA 選択肢: X,Y,Z プロパティB 選択肢: プロパティAの選択内容により可変 プロパティAの値=Xの時、X1,X2,X3 プロパティAの値=Yの時、Y1,Y2,Y3 プロパティAの値=Zの時、Z1,Z2,Z3 プロパティウィンドウで、選択肢から選べる様にしたい為、 列挙型にしたいと思っています。この様な事は可能でしょうか? 「列挙型 動的」などで検索していたところ、 リフレクションやタイプコンバータといったキーワードに たどり着いたのですが、それらが実現する事に使えるのか、 関係しているのかどうかが、はっきりと理解できませんでした。 それとも、列挙型ではなくもっと違う方法で実現すべき内容なのでしょうか? よろしくお願いします。 | ||||||||
|
投稿日時: 2007-06-13 10:41
プロパティBの表示内容を動的に変えるということはできないと 思います。私が知らないだけかもですが・・・。 ただ、プロパティAの設定によって、プロパティBで選択できる値を制限する ということであれば、プロパティBのsetブロックでプロパティAとvalueの内容を チェックし、不適切な値であればメッセージボックスで警告する方法で代用 できないでしょうか? | ||||||||
|
投稿日時: 2007-06-13 10:45
そもそもプロパティBって、
コントロールではどんな型で実装するつもりなんでしょう? | ||||||||
|
投稿日時: 2007-06-13 11:18
TypeConverterを利用すれば可能ですよ。
TypeConverterは、色々種類があるので扱う型によって 適切なConverterを利用します。 KIさんが言うように、プロパティBの型が不明ですが、 Enum型であれば、EnumConvertを継承したクラスを自身で作成します。 TypeConverterクラスには、GetStandardValuesメソッドが存在します。 このメソッドを利用することで、デザイナウィンドウでプロパティが クリックされた場合に表示される選択肢の幅を限定することができます。 以下は、MyUserControlというユーザーコントロールに プロパティA、プロパティBが存在する場合の例です。 (GetStandardValuesメソッドの中身)
Converterクラスを作成したら、これを利用できるようにしなければなりません。 限定したいのはプロパティBですから、プロパティBを公開している箇所で、 Converterクラスを利用してあげるような記述をします。
こんな感じでいかがでしょう? [ メッセージ編集済み 編集者: ガルマ・ザビ 編集日時 2007-06-13 11:24 ] | ||||||||
|
投稿日時: 2007-06-13 13:30
TAMさん、KIさん、ガルマ・ザビさん
ご返答ありがとうございます。 説明不足ですみませんでした。 プロパティBもEnum型で考えてました。 ガルマさんの例に沿ってやってみたところ 見事実現する事ができました! 内容も理解でき、大変勉強になりました。 ありがとうございました。 |
1