2011-03-03 4 views
5

En un complemento de Visual Studio que crea correctamente un formulario, pero no me da ninguna referencia de nuevo a la instancia de prjItem de EnvDTE.Ninguna referencia al elemento de proyecto creado a través de AddFromTemplate() devolvió

Aquí está la pieza de código que añade el formulario al proyecto:

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

Obs .: 'solución' es un objeto EnvDTE80.Solution2.

De cource Puedo obtener la referencia por otras vías, como proj.ProjectItems.Item ([index]) (haciendo un ciclo y buscando nombres), pero no es así como quiero hacerlo, y necesito esto referencia en otro lugar para agregar controles a esta forma.

¿Estoy haciendo algo mal?

+0

acabo de escribir una pregunta relacionada: http://stackoverflow.com/questions/5185370/adding-controls-to-a-form-when-i-only-have-the-reference- to-its-envdte – JohnDoe

Respuesta

8

acaba de encontrar un comentario en MSDN:

AddFromTemplate siempre devuelve un valor NULL valor

En un momento, esto era cierto. Pero con versiones posteriores de Visual Studio, que incluía la capacidad de agregar elementos múltiples de una sola plantilla, el valor de retorno para este método podría no devolver varios elementos. Entonces ahora devuelve un valor NULL en todas las instancias. Esto se debe al inconveniente de que la firma COM para este método particular no se puede cambiar sin rompiendo una gran cantidad de código que ya está en uso.

En consecuencia, si necesita la interfaz ProjectItem del artículo apenas añadido a través de la llamada AddFromTemplate, usted puede recorrer la colección ProjectItems, o puede crear un evento ProjectItemsEvents.ItemAdded justo antes de llamar AddFromTemplate, y almacenar el ProjectItem pasado a su controlador OnItemAdded .

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

+0

Esto crea un nuevo proyecto en una solución existente. Quiero crear un nuevo ítem del proyecto (en mi caso, un Windows Form) en un proyecto existente. – JohnDoe

+0

tienes razón. Investigué un poco más ... espero que esto ayude – thedev

+0

¡Esto seguramente ayuda mucho! Bueno, al final haré lo que evité, pero al menos ya sé que funciona ... ¡Muchas gracias! – JohnDoe

Cuestiones relacionadas