C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: PropertyGridで属性の変更


(過去ログ 64 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■37325 / inTopicNo.1)  PropertyGridで属性の変更
  
□投稿者/ tingtong (1回)-(2009/06/17(Wed) 10:58:46)

分類:[C++/CLI] 

PropertyGridで属性の変更

お世話になります。tingtongと申します。

現在、PropertyGridを使用して、設定画面のUIを作成しております。
開発環境はWindowsXP(SP3)、VisualStudio2008、C++/CLIです。

状況に応じて、属性を変えたいのですがその方法がわかりません。

具体的には、以下のように定義されたプロパティを
[System::ComponentModel::Browsable(false)]
property bool flag;
状況に応じて、Browsableのtrue/falseを切り替えて
表示したりしなかったりする方法です。


何かお分かりになる方がいらっしゃいましたら、教えていただけるとありがたいです。
よろしくお願いします。

引用返信 編集キー/
■37327 / inTopicNo.2)  Re[1]: PropertyGridで属性の変更
□投稿者/ επιστημη (1986回)-(2009/06/17(Wed) 11:47:25)
επιστημη さんの Web サイト
> 具体的には、以下のように定義されたプロパティを
> [System::ComponentModel::Browsable(false)]
> property bool flag;
> 状況に応じて、Browsableのtrue/falseを切り替えて
> 表示したりしなかったりする方法です。

その"状況"とはどんな状況?

それがたとえば
Debug時にはtrue / Release時にはfalse
なんてことなら

#ifdef _DEBUG
[System::ComponentModel::Browsable(true)]
#else
[System::ComponentModel::Browsable(false)]
#endif

て書けばいいんだし...

引用返信 編集キー/
■37328 / inTopicNo.3)  Re[2]: PropertyGridで属性の変更
□投稿者/ tingtong (3回)-(2009/06/17(Wed) 12:03:42)
No37327 (επιστημη さん) に返信

> その"状況"とはどんな状況?

具体的には、Formに貼り付けたPropertyGridが
 AからFormが呼び出された場合false(表示しない)
 BからFormが呼び出された場合true(表示する)
といった状況です。
つまり、動的に変えたいということです。
引用返信 編集キー/
■37343 / inTopicNo.4)  Re[3]: PropertyGridで属性の変更
□投稿者/ Hongliang (422回)-(2009/06/17(Wed) 15:49:23)
// もっと簡単な方法があるかも知れませんが。
TypeDescriptor::AddProvider によって、任意の TypeDescriptionProvider を特定のインスタンスに関連づけることができます。
そこで、独自の TypeDescriptionProvider 派生クラスを定義し、GetTypeDescriptor メソッドをオーバーライドして ICustomTypeDescriptor インターフェイスを実装するインスタンスを返すようにします。
ICustomTypeDescriptor インターフェイスの基本実装として CustomTypeDescriptor 抽象クラスが用意されているので、こちらも独自の派生クラスを定義し、GetProperties(array<Attribute^>^) をオーバーライドします。
GetProperties(array<Attribute^>^) の実装が一番面倒ですが(まともにやろうとすると PropertyDescriptor 派生クラスの定義が必要になります)、手を抜くなら CustomTypeDescriptor 派生クラスのコンストラクタに TypeDescriptor::GetProerties(Object^) で取得した PropertyDescriptorCollection を渡しておいて、あとは GetProperties 内で渡された attributes に合致する PropertyDescriptor のリストを作って返す、という流れになるでしょう。
ここで attributes に BrowsableAttribute が含まれているとき、目的のプロパティについては PropertyDescriptor::Attributes を無視して、返すリストに追加するかどうかを独自判断とするようにします。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -