5

フォームを正常に作成するVisualStudioアドインでは、EnvDTEのprjItemインスタンスへの参照が返されません。

フォームをプロジェクトに追加するコードは次のとおりです。

string templatePath = solution.GetProjectItemTemplate("Form.zip", "csproj");
ProjectItem prjItem = project.ProjectItems.AddFromTemplate(templatePath, "myForm.cs");

Obs.:'solution'はEnvDTE80.Solution2オブジェクトです。

当然のことながら、proj.ProjectItems.Item([index])(ループを実行して名前をチェックする)などの他の方法で参照を取得できますが、それは私がやりたい方法ではありません。このフォームにコントロールを追加します。

私は何か間違ったことをしていますか?

4

1 に答える 1

8

MSDN で次のコメントを見つけました。

AddFromTemplate は常に NULL 値を返します

かつて、これは真実でした。しかし、単一のテンプレートから複数の項目を追加する機能を含む Visual Studio の新しいバージョンでは、このメソッドの戻り値は複数の項目を返すことができませんでした。そのため、すべてのインスタンスで NULL 値が返されるようになりました。これは、この特定のメソッドの COM 署名を変更するには、既に使用されている多くのコードを壊す必要があるという制約によるものです。

したがって、AddFromTemplate 呼び出しによって追加されたばかりの項目の ProjectItem インターフェイスが必要な場合は、ProjectItems コレクションを反復処理するか、AddFromTemplate を呼び出す直前に ProjectItemsEvents.ItemAdded イベントを作成し、OnItemAdded に渡された ProjectItem を保存します。ハンドラ。

http://msdn.microsoft.com/en-us/library/envdte.projectitems.addfromtemplate(v=vs.80).aspx#1

于 2011-03-03T17:52:48.217 に答える