2011-03-03 33 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

相关问题