@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

クラスビューに表示されているクラス名を取得したい(.NET)

1
投稿者投稿内容
かすみ
会議室デビュー日: 2004/09/02
投稿数: 16
投稿日時: 2004-09-02 16:53
はじめまして。かすみと申します。

現在、.NETでC#で開発をしています。
ウィザードを使用して、.NETでいうところの”継承ピッカー”の
ようなものを作成しようとしています。
ウィザードの表示はできたのですが、肝心のクラス情報の取得方法が
わかりません。
ソリューション情報からファイル情報を取得することはできたのですが。。。
ウィザードはExecuteメソッドを使用して、表示しています。
どなたかお分かりになる方がいらっしゃいましたら、ご教授願います。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-09-02 18:44
かすみさん、こんばんは。

この辺を参照してみて下さい。
かすみ
会議室デビュー日: 2004/09/02
投稿数: 16
投稿日時: 2004-09-03 11:30
返信ありがとうございます。

MSDN見てみましたが、これかなぁ〜というのが、"CodeClass"オブジェクトでした。
が・・・現在のソースコードからCodeClassオブジェクトへのアクセス方法が
わからずに悩んでいます。

void IDTWizard.Execute( object application ,
     int hwndOwner ,
ref object[] contextParams ,
ref object[] customParams ,
ref wizardResult retval )
{
myDTE = (_DTE)application;
string str = myDTE.Solution.Projects.Item(1).CodeModel
.CodeElements.Item(1).Name;
}

で、strには、プロジェクト名(かな?)が入っていることはわかったのですが
CodeElementコレクションからCodeClassオブジェクトへのアクセスが
わかりませんでした。
それとも、基本的に上記ソースが間違っているのでしょうか・・・?

何かわかることがありましたら、ご教授願います。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-09-03 12:23
かすみさん、こんにちは。

CodeElement の Kind プロパティが vsCMElement.vsCMElementClass である場合、CodeClassにキャストできます。
かすみ
会議室デビュー日: 2004/09/02
投稿数: 16
投稿日時: 2004-09-03 14:16
ご返信ありがとうございます。

Kindプロパティを見てみたところ、vsCMElementNamespaceになっていました。
だから、キャストできなかったのですね・・・

続いてお聞きしたいことがあります。
現在、ネームスペースのKindになっているんですが、
1.何故Kindがネームスペースになっているのでしょうか?
2.KindがvsCMElementClassになる方法(ソースの記述方法)はあるのでしょうか?

ソースについては、上記のソースを元に考えていただければ嬉しいです。
たびたび質問ばかりですみませんがご教授願います。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-09-03 15:30
かすみさん、こんにち。

引用:

1.何故Kindがネームスペースになっているのでしょうか?
2.KindがvsCMElementClassになる方法(ソースの記述方法)はあるのでしょうか?


クラスビュー・ウィンドウのツリーを考えてみて下さい。階層構造になっていますよね?
プロジェクト(EnvDTE.Project)の下(EnvDTE.Project.CodeModel.CodeElements)には名前空間(EnvDTE.CodeNamespace)があり、その下(EnvDTE.CodeNamespace.Members)にクラス(EnvDTE.CodeClass)やら構造体(EnvDTE.CodeStruct)やらインターフェイス(EnvDTE.CodeInterface)やらがあり、さらにその下(Members)にはメソッド(EnvDTE.CodeFunction)やプロパティ(EnvDTE.CodeProperty)なんかがぶら下がってます。
Kind プロパティに応じて、適切にキャストしてあげればOKです。
かすみ
会議室デビュー日: 2004/09/02
投稿数: 16
投稿日時: 2004-09-03 16:25
たびたびご返信ありがとうございます。

やっと理解できてきました。
NamespaceのMembersにCodeClass等はぶらさがってたんですね。
ツリーを見てても、イマイチわかりにくかったのですが、
きくちゃんさんの回答で、大分すっきりしました。

これで、先へ進むことができそうです。
丁寧に説明していただいてありがとうございました。
1

アイティメディアの提供サービス

ホワイトペーパー(TechTargetジャパン/閲覧には会員登録が必要です)

スキルアップ/キャリアアップ(JOB@IT)