- - PR -
クラスビューに表示されているクラス名を取得したい(.NET)
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-09-02 16:53
はじめまして。かすみと申します。
現在、.NETでC#で開発をしています。 ウィザードを使用して、.NETでいうところの”継承ピッカー”の ようなものを作成しようとしています。 ウィザードの表示はできたのですが、肝心のクラス情報の取得方法が わかりません。 ソリューション情報からファイル情報を取得することはできたのですが。。。 ウィザードはExecuteメソッドを使用して、表示しています。 どなたかお分かりになる方がいらっしゃいましたら、ご教授願います。 | ||||
|
投稿日時: 2004-09-02 18:44
かすみさん、こんばんは。
この辺を参照してみて下さい。 | ||||
|
投稿日時: 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オブジェクトへのアクセスが わかりませんでした。 それとも、基本的に上記ソースが間違っているのでしょうか・・・? 何かわかることがありましたら、ご教授願います。 | ||||
|
投稿日時: 2004-09-03 12:23
かすみさん、こんにちは。
CodeElement の Kind プロパティが vsCMElement.vsCMElementClass である場合、CodeClassにキャストできます。 | ||||
|
投稿日時: 2004-09-03 14:16
ご返信ありがとうございます。
Kindプロパティを見てみたところ、vsCMElementNamespaceになっていました。 だから、キャストできなかったのですね・・・ 続いてお聞きしたいことがあります。 現在、ネームスペースのKindになっているんですが、 1.何故Kindがネームスペースになっているのでしょうか? 2.KindがvsCMElementClassになる方法(ソースの記述方法)はあるのでしょうか? ソースについては、上記のソースを元に考えていただければ嬉しいです。 たびたび質問ばかりですみませんがご教授願います。 | ||||
|
投稿日時: 2004-09-03 15:30
かすみさん、こんにち。
クラスビュー・ウィンドウのツリーを考えてみて下さい。階層構造になっていますよね? プロジェクト(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-03 16:25
たびたびご返信ありがとうございます。
やっと理解できてきました。 NamespaceのMembersにCodeClass等はぶらさがってたんですね。 ツリーを見てても、イマイチわかりにくかったのですが、 きくちゃんさんの回答で、大分すっきりしました。 これで、先へ進むことができそうです。 丁寧に説明していただいてありがとうございました。 |
1