Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以编程方式创建VS 2008 Windows窗体项目,该项目可以像手动创建的任何其他项目一样进行维护_C#_Windows_Forms - Fatal编程技术网

C# 如何以编程方式创建VS 2008 Windows窗体项目,该项目可以像手动创建的任何其他项目一样进行维护

C# 如何以编程方式创建VS 2008 Windows窗体项目,该项目可以像手动创建的任何其他项目一样进行维护,c#,windows,forms,C#,Windows,Forms,我有一堆控件属性,包括控件类型、位置、大小等,它们作为文本文件从不同平台上的旧系统派生而来。我认为将这些控件描述加载到VS2008中的Windows窗体项目中,然后就可以像手动创建一样在VS中维护新项目,这将是相当容易的 我很熟悉使用VS和C,但我不确定从哪里开始 我在网上搜索了很多关于在运行时创建表单控件的文章,鉴于我掌握的信息,这并不难,但我希望创建的表单成为Win forms项目的永久部分,因此我需要将在运行时创建的内容输入到VS中,并且可以在项目中访问,就像它是手动放置在设计器表面上一样

我有一堆控件属性,包括控件类型、位置、大小等,它们作为文本文件从不同平台上的旧系统派生而来。我认为将这些控件描述加载到VS2008中的Windows窗体项目中,然后就可以像手动创建一样在VS中维护新项目,这将是相当容易的

我很熟悉使用VS和C,但我不确定从哪里开始

我在网上搜索了很多关于在运行时创建表单控件的文章,鉴于我掌握的信息,这并不难,但我希望创建的表单成为Win forms项目的永久部分,因此我需要将在运行时创建的内容输入到VS中,并且可以在项目中访问,就像它是手动放置在设计器表面上一样。有没有办法用程序创建这些表单,然后将它们保存在VS可以接受的表单中

我手动创建了一个windows窗体项目,尝试将其用作模板,并确定VS是如何做到这一点的。我试图理解各种资源文件的内容和它们之间的关系,但这有点过分了。还有警告,各种文件是由VS创建的,不应手动修改

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


如果您对此有任何建议或指导,我们将不胜感激。

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


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

查看T4文本模板,VS2008支持它们。您可以用C编写一个T4程序,读取XML表单描述并将其转换为WinForms文件——基本上是您自己版本的InitializeComponent。如果您保持与真正的foo.designer.cs文件相同的源代码模式,那么您也可以将WinForms designer与它们一起使用。非常感谢您的回复。当我在foo.designer.cs中看到免责声明时,我有点害怕,但我已经做了一些实验,我认为这是可行的。我确实在前一段时间看过T4模板,但我现在没有时间来学习。我想我会用现有的Windows窗体制作一个模板,然后修改它。再次感谢。谢谢埃里克,这很有帮助。在查看各种文件时,我已经按照您的建议做了,但是它有点让人困惑,而且关于不要弄乱生成代码的免责声明让我很反感。自从读了你的文章后,我又重新访问了它,当我修改foo.designer.cs时,世界并没有结束,所以我觉得更有信心:-我喜欢使用WPF的XAML想法,但我从来没有使用过WPF,所以再次出现了学习曲线。Win窗体对于Windows来说似乎很好而且很基本,所以我可能会这样做。从来没有听说过CSharpCodeProvider类,所以我也来看看。谢谢