2011-03-03 49 views
5

在成功創建窗體的Visual Studio加載項中,但不給我提供EnvDTE的prjItem實例的引用。對通過AddFromTemplate()創建的項目項目沒有引用返回

下面是增加的形式到項目中的一段代碼:

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

觀察值:「解決方案」是EnvDTE80.Solution2對象。

cource的我可以通過其他方式獲取引用,如proj.ProjectItems.Item([index])(做一個循環和檢查名稱),但這不是我想要做的,我需要這個參考或添加控件到這個表單。

我做錯了什麼?

+0

只是寫了一個相關的問題:http://stackoverflow.com/questions/5185370/adding-controls-to-a-form-when-i-only-have-the-reference- to-en-envdte – JohnDoe 2011-03-03 19:16:36

回答

8

剛剛發現一個評論對MSDN:

AddFromTemplate總是返回NULL值

有一段時間,這是真的。但 與更高版本的Visual Studio, 其中包括能夠從單個模板添加 多個項目, 此方法的返回值可能 不會返回多個項目。所以它現在 在所有情況下返回一個NULL值。 這是由於這種情況造成的,即 方法的 方法的COM簽名無法更改,因爲 中斷了大量已在使用的代碼。

因此,如果你需要的項目的 項目項接口僅僅 通過AddFromTemplate呼叫添加, 您可以通過 ProjectItems訪問集合,或者只是打電話 才能 創建ProjectItemsEvents.ItemAdded 事件AddFromTemplate,並將 ProjectItem存儲傳遞給您的OnItemAdded 處理程序。

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

+0

這在na現有解決方案中創建了一個新項目。我想在現有項目中創建一個新項目Item(在我的情況下,Windows窗體)。 – JohnDoe 2011-03-03 18:18:31

+0

你是對的。做了更多的研究...希望這可以幫助 – thedev 2011-03-03 18:49:18

+0

這肯定會有很大的幫助!那麼,最後我會盡我所能避免的,但至少我已經知道它的工作原理。非常感謝! – JohnDoe 2011-03-03 19:04:28

相關問題