【问题标题】:Form won't save after creating it with EnvDTE使用 EnvDTE 创建表单后不会保存
【发布时间】:2011-03-04 13:29:54
【问题描述】:

我创建了一个 Visual Studio 加载项,可将表单添加到打开的解决方案中的现有项目中。

这就是我创建表单的方式:

string templatePath = sol.GetProjectItemTemplate("Form.zip", "csproj");
//sol is an EnvDTE80.Solution2

proj.ProjectItems.AddFromTemplate(templatePath, formName);
//proj is an EnvDTE.Project

之后我可以成功获取到添加表单的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

然后按钮成功添加到表单中:

但是,当我尝试保存此表单时,它就是无法保存。我单击 Visual Studio 的 [save] 按钮,它只是没有变灰。即使我点击[全部保存],表格也不会被保存。然后我关闭 Visual Studio,重新打开它,然后打开我使用加载项向其中添加了新表单的项目,但新按钮根本不存在。只是一个空表单。

我什至尝试通过以下代码以编程方式保存项目和解决方案:

itemForm.Save(itemForm.Name);
//itemFrom is an EnvDTE.ProjectItem

proj.Save(proj.FullName);
//proj is an EnvDTE.Project

我认为这是因为我用来测试插件的 Visual Studio 实例是调试实例,在我运行插件后立即打开。但我尝试使用已安装的插件(运行后自动保留),问题仍然存在。


更新
我刚刚注意到两件事:

1) 按钮只出现在表单的设计上,其他地方都没有。而且它甚至不允许我选择它来查看它的属性。

它的名字不会出现在 Intellisense 中,也不会出现在对象列表中,甚至不会出现在表单的设计文档中。

作为测试,我手动添加了一个按钮,我可以选择这个按钮并与之交互:

我可以从中得到的是我没有正确添加按钮。

那么关于按钮的新问题是:如何将新按钮添加到通过 EnvDTE 创建的表单中,以便在设计时与之交互?

2) 在尝试查看我的时髦按钮和手动添加按钮的区别时,我尝试了一些我以前从未使用编程方式创建的表单的方法:实例化并运行它。

这就是我的做法:

MyFunkyForm frm = new MyFunkyForm ();
frm.Show();

它在屏幕上闪烁(显然我的两个按钮都没有),执行结束。即使我尝试在它的 Form_load 上做点什么,它也会被执行,然后表单会闪烁,执行结束(表单关闭,调试结束),就像我调用了 Close() 方法一样。

那么额外的问题是:我在添加表单时是否跳过了一个步骤,或者我根本没有正确创建它?

【问题讨论】:

  • 有那么复杂吗?这里没有人创建过向表单添加控件的加载项吗?

标签: c# visual-studio-2010 envdte


【解决方案1】:

您正在向 c# 项目添加表单,我认为您不应该像以前那样单独实例化表单,但如果您想查看它,您应该执行应用程序。

我不知道该怎么做,自己从未尝试过,找到了这个,希望对您有所帮助:

http://www.mztools.com/articles/2006/mz2006016.aspx

【讨论】:

  • 非常感谢!这个链接非常有用。事实上,我得到了对错误表单的错误引用,即“设计表单”,一个 Visual Studio 让我们编辑表单,而不是我使用插件的实际项目中的实际表单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-31
  • 2021-04-01
  • 2016-02-28
  • 1970-01-01
  • 2020-09-18
  • 1970-01-01
相关资源
最近更新 更多