Mar*_*elo 5 c# visual-studio-2010 envdte
我创建了一个Visual Studio加载项,在已打开的解决方案中将表单添加到现有项目中.
这就是我创建表单的方式:
string templatePath = sol.GetProjectItemTemplate("Form.zip", "csproj");
//sol is an EnvDTE80.Solution2
proj.ProjectItems.AddFromTemplate(templatePath, formName);
//proj is an EnvDTE.Project
Run Code Online (Sandbox Code Playgroud)
之后,我可以成功获取对添加的表单的ProjectItem的引用,然后我可以获得对System.Windows.Forms.Form的引用,并通过此引用我可以向表单添加一个按钮,如下所示:
Button btn = new Button();
btn.Text = "my funky button";
btn.Name = "newButton";
btn.Size = new Size(150, 23);
btn.Location = new Point(30, 30);
frmNewForm.Controls.Add(btn);
//frmNewForm is a System.Windows.Forms.Form
Run Code Online (Sandbox Code Playgroud)
然后按钮成功添加到表单中:

但是,当我尝试保存此表单时,它只是不会保存.我单击Visual Studio的[保存]按钮,它不会变为灰色.即使单击[全部保存],也不会保存表单.然后我关闭Visual Studio,重新打开它,然后打开我用加载项添加新表单的项目,而新按钮就不存在了.只是一个空的表格.
我甚至尝试通过以下代码以编程方式保存项目和解决方案:
itemForm.Save(itemForm.Name);
//itemFrom is an EnvDTE.ProjectItem
proj.Save(proj.FullName);
//proj is an EnvDTE.Project
Run Code Online (Sandbox Code Playgroud)
我认为这是因为我用来测试我的加载项的Visual Studio实例是一个调试版,在我运行加载项后立即打开.但我已经尝试使用已安装的加载项(运行后自动保留),问题仍然存在.
更新
我刚注意到两件事:
1)按钮仅出现在表单的设计上,而不是其他地方.它甚至不让我选择它来看它的属性.
它的名称不会出现在Intellisense,对象列表中,甚至出现在表单的设计文档中.
作为测试,我手动添加了一个按钮,这个我可以选择并与之交互:

我能从中获得的是我没有正确添加按钮.
然后关于按钮的新问题是:如何在设计时以我可以与它交互的方式向通过EnvDTE创建的表单添加新按钮?
2)在尝试查看与我的时髦按钮和我的手动添加按钮的区别时,我尝试了以前没有以编程方式创建的形式:实例化并运行它.
以下是我的表现:
MyFunkyForm frm = new MyFunkyForm ();
frm.Show();
Run Code Online (Sandbox Code Playgroud)
它在屏幕上闪烁(显然没有我的两个按钮),执行结束.即使我尝试在Form_load上执行某些操作,它也会执行,然后表单闪烁,执行结束(表单关闭,调试结束),就像我调用了Close()方法一样.
那么另外一个问题是:我在添加表单时是否跳过了一步,或者我根本没有正确创建它?
您正在向 ac# 项目添加一个表单,我认为您不应该像您那样单独实例化该表单,但如果您想查看它,您应该执行该应用程序。
我不知道如何做到这一点,从未尝试过自己,找到了这个,希望它有帮助:
http://www.mztools.com/articles/2006/mz2006016.aspx