【问题标题】:How to create a VS 2008 Windows Forms project programmatically, that can be maintained just like any other project created manually如何以编程方式创建一个 VS 2008 Windows 窗体项目,该项目可以像手动创建的任何其他项目一样进行维护
【发布时间】:2015-03-26 02:16:33
【问题描述】:

我有一堆控件属性(控件类型、位置、大小等)作为文本文件派生自不同平台上的旧系统。我认为将这些“控件描述”加载到 VS 2008 中的 Windows 窗体项目中会相当容易,然后能够在 VS 中维护新项目,就像它是手动创建的一样。

我熟悉使用 VS 和 C#,但我不知道从哪里开始。

我在网上搜索并找到了一些关于在运行时在表单上创建控件的文章,这并不难,考虑到我拥有的信息,但我希望创建的表单成为 Win Forms 项目的永久部分,所以我需要将运行时创建的内容放入 VS 中,并且可以在项目中访问,就好像它已手动放置在设计器表面上一样。有没有办法可以用程序创建这些表单,然后以 VS 可接受的形式“保存”它们?

我手动创建了一个 Windows 窗体项目来尝试用作“模板”并确定 VS 是如何做到的。我试着去了解各种资源文件的内容和关系,但是有点过头了。还有警告说各种文件都是VS创建的,不能手动修改。

我有近 1000 个来自旧系统的表单,因此手动将每个表单添加到 VS 的想法是非常不可行的。如果有办法将表单的 XML 描述输入到 VS Forms 项目中,我可以将文本描述翻译成 XML...?

对此的任何建议\方向将不胜感激。

【问题讨论】:

  • 看看 T4 文本模板,VS2008 支持它们。您将编写一个 T4 程序(在 C# 中)读取您的 XML 表单描述并将它们转换为 WinForms 文件 - 本质上是您自己的 InitializeComponent 版本。如果您保持与“真实”foo.designer.cs 文件相同的源代码模式,那么您也可以使用 WinForms 设计器。
  • 非常感谢您的回复。当我看到 foo.designer.cs 中的免责声明时,我有点害怕,但我已经做了一些实验,我认为这是“可行的”。前段时间我确实看过 T4 模板,但我现在没有时间绕过学习曲线。我想我将从现有的 Windows 窗体中制作一个模板,然后对其进行修改。再次感谢。

标签: c# windows forms


【解决方案1】:

VS 使用代码生成在 Windows 窗体中创建控件。如果您查看表格,例如Form1 在您的项目中,它由三个文件组成,Form1.csForm1.designer.csForm1.resxForm1.designer.cs 文件包含InitializeComponent 方法中控件的构造。 VS 在设计时执行并解析它,为您提供可以进行修改的表单的设计视图。您可以编写一个程序来解析您的文本文件并为InitializeComponent 生成C# 代码以获得正确的效果。有多种选择,但您可能希望使用 CSharpCodeProvider 类。

另一种选择是使用 WPF。表单是使用 XAML 在 WPF 中设计的,XAML 是一种基于 XML 的格式。 (我的意思是,XAML 文档也是有效的 XML 文档,但反之则不然。)如果您创建 WPF 项目并向其添加一些控件,那么您可以查看 XAML 文件以了解情况结构。

【讨论】:

  • 感谢 Erik,这很有帮助。在查看各种文件时,我已经按照您的建议进行了操作,但它有点令人困惑,而且关于不弄乱生成代码的免责声明让我很反感。自从阅读了您的帖子后,我重新审视了它,当我修改 foo.designer.cs 时,世界并没有结束,所以我感觉更有信心 :-) 我喜欢 WPF 的 XAML 想法,但我从未使用过 WPF,所以再次有学习曲线。 Win Forms 对于 Windows 来说似乎很好而且很基础,所以我可能会走这条路。从来没有听说过 CSharpCodeProvider 类,所以我也来看看。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-06
  • 1970-01-01
  • 2016-06-17
相关资源
最近更新 更多