我从来没有能够成功地将Form
现有文件中的一个添加到一个新项目中。
我在博客上读到,您只添加了 *.cs 文件并且依赖项进来了。好吧,我尝试了这个,文件确实拖动并关联了 *.designer 和 *.resx 文件。 但是,表单图标不显示。相反,该文件看起来像一个普通的 *.cs 文件图像。而且,当我双击文件时,我得到的是后面的代码而不是表单对象。
是否可以添加现有表单并正确识别它们?
我从来没有能够成功地将Form
现有文件中的一个添加到一个新项目中。
我在博客上读到,您只添加了 *.cs 文件并且依赖项进来了。好吧,我尝试了这个,文件确实拖动并关联了 *.designer 和 *.resx 文件。 但是,表单图标不显示。相反,该文件看起来像一个普通的 *.cs 文件图像。而且,当我双击文件时,我得到的是后面的代码而不是表单对象。
是否可以添加现有表单并正确识别它们?
这是一种不涉及关闭项目并重新打开它的方法:
经过更多研究,我发现了问题的根源。正确的是,只需导入*.cs
文件即可。需要注意的是项目类型。如果在类库项目中工作,则必须执行另一个步骤。
System.Windows.Forms.dll
添加对和的引用System.Drawing
。*.cs
文件笔记:
A. 只有在我执行了这些步骤并尝试打开文件后才能正确识别这些文件。突然VS“醒来”并修复了文件。
B. 步骤的顺序无关紧要。如果您已经导入 *.cs 文件,只需修复引用。
C. 如果缺少其他引用,例如 DevExpress 或其他 3rd 方控件导入),*.cs 文件将无法正确显示,直到此问题得到解决。
抱歉 P.Brian.Mackey,您的解决方案对我不起作用。它确实通过让 VS 识别它是一个表单而不是一个代码文件来改进它,即给它是图标(想象它添加了表单)
但我设法完全解决问题的唯一方法是在文本编辑器中手动编辑 csproj 文件。我不太相信这是一个很好的解决方案并且可能非常危险,特别是考虑到我犯了两个打字错误并完全破坏了项目,但一旦我做对了它就可以工作。也很难找到诸如未正确关闭标签或忘记文件扩展名之类的错误。
因此,在通过“添加->现有项目”添加文件后,该项目从这些条目开始:(Ps我确定您不必先将文件复制到项目文件夹中,只需导航到它们的存储位置在项目之外,VS会将它们复制到您右键单击的文件夹中。当然也可以提前复制。)
<Compile Include="Reports\GBudget1Report.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Reports\GBudget1Report.Designer.cs" />
<Compile Include="Reports\GBudget2Report.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Reports\GBudget2Report.Designer.cs" />
<Compile Include="Reports\LASHForm.cs">
<SubType>Form</SubType>
</Compile>
并进一步在文件中:
<EmbeddedResource Include="Reports\GBudget1Report.resx" />
<EmbeddedResource Include="Reports\GBudget2Report.resx" />
将这些与项目中正常工作的现有表单进行比较(另一个选项是如果您没有,则在 Visual Studio 中创建一个新表单,它会为您提供正确的标记以进行复制)我发现DependentUpon 标记没有将子文件关联到主表单代码文件。
所以我手动编辑它以匹配:
<Compile Include="Reports\GBudget1Report.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Reports\GBudget1Report.Designer.cs">
<DependentUpon>GBudget1Report.cs</DependentUpon>
</Compile>
<Compile Include="Reports\GBudget2Report.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Reports\GBudget2Report.Designer.cs">
<DependentUpon>GBudget2Report.cs</DependentUpon>
</Compile>
再次在文件下方:
<EmbeddedResource Include="Reports\GBudget1Report.resx">
<DependentUpon>GBudget1Report.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Reports\GBudget2Report.resx">
<DependentUpon>GBudget2Report.cs</DependentUpon>
</EmbeddedResource>
这不是我喜欢的解决方案,但它有效。如果有人有更好的解决方案,我很乐意倾听。
您可以将现有表单导入到项目中。需要导入的文件取决于用于创建表单的 Visual Studio 版本。
我将假设您在不同的解决方案中有两个独立的项目 Foo 和 Bar:
C:\
Projects\
Foo\
Foo.sln
Foo.vcproj
Program.cs
Foo.cs
Foo.Designer.cs
Foo.Designer.resx
和
C:\
Projects\
Bar\
Bar.sln
Bar.vcproj
Program.cs
Bar.cs
Bar.Designer.cs
Bar.Designer.resx
现在,假设您需要将表单 Foo 导入到项目 Bar 中。首先,您需要将 Foo 附带的所有文件复制到 Bar 项目文件夹中:
C:\
Projects\
Bar\
Bar.sln
Bar.vcproj
Program.cs
Bar.cs
Bar.Designer.cs
Bar.Designer.resx
Foo.cs
Foo.Designer.cs
Foo.Designer.resx
然后,在 Visual Studio 中打开 Bar.sln 并在解决方案资源管理器中右键单击 Bar 项目。选择 [添加现有项目] 并在打开的对话框中选择您为 Foo 表单复制的所有文件。确认后,您应该可以在解决方案资源管理器中正确看到新导入的表单。
我刚刚在升级 VisualBasic 表单时遇到了类似的问题,从 VisualStudio 2010 升级到 VisualStudio 2013。似乎有两种方法可以添加现有项目。
问题:如果我选择 Main Window->Project->Add Existing Item 并仅拉入文件 formname.vb,结果似乎被解释为仅代码(无设计器),指向原始文件(而不是复制到新项目)并有其他问题。
解决方案:如果相反,我转到解决方案资源管理器窗口,单击以选择项目(而不是树中的较低级别对象),然后在窗口中单击鼠标右键,结果菜单提供添加->现有项目。使用此版本按预期工作,只需要我找到 formname.vb 文件。没有手动复制文件,没有指向多个文件,没有编辑脚本等。我猜这同样适用于用 C 编写的表单。
您实际上需要 2 个文件: - Form1.cs - Form1.Designer.cs
复制 - 将它们粘贴到您的新项目中(只需确保新项目中不存在同名的此类表单)
转到解决方案资源管理器并右键单击它然后添加现有项目,这里选择现有表单路径。现在,这很重要,在您要使用现有表单的页面上,您必须添加头文件:
using "your existing project name";
如果您想创建一个 Windows 窗体库,最好创建一个 Windows 窗体应用程序项目。然后删除默认窗体(Form1),进入项目属性,将输出类型(或项目类型)从 Windows 窗体应用程序更改为类库。
这样,输出将是一个 DLL,但它将包含 Windows 窗体项目所需的引用。正如您所指出的,在添加现有项目时,不要添加它们对应的 .Designer 和 .resx 文件,只需添加它们的顶级/主文件。
也许是因为使用了 Visual Studio 2012,但所有这些解决方案都不起作用。AtConway 提示编辑 csproj 文件。这个提示奏效了。
假设您要导入名为 YourFormName 的表单。然后您应该只将 YourFormName.cs 添加到项目中 - 其余部分(YourFormName.designer.cs 和 YourFormName.resx)将自动添加。
脚步:
在 VS2013 中创建 WinForms 项目(在我的情况下 .Net Framework 是 4.5.1)右键单击项目 -> 添加 -> 现有项...将您要导入的 winform 复制到项目的文件夹中。如果要将其添加到新文件夹,请先创建一个文件夹然后添加。搜索任何带有控件的 WinForm(我在 VS2010 中为 .NET 框架 4 添加了两个表单)在不到 10 秒的时间内 Visual Studio 添加了所有剩余的文件,我可以在设计模式下打开它。
在尝试了几种方法后,我发现使用现有 WinForm 的最简单方法是:(类似于 HaraldDuch 的答案)并且仅在 VS2013 上进行了测试:
1) 在将现有 WinForm 移动到目标项目的源文件夹之前,使用与源 WinForm 相同的名称创建一个虚拟 WinForm。
2)保存时关闭您的VS解决方案。
3) 从 Windows 资源管理器(关闭 VS IDE)中删除/替换新创建的 WinForm 虚拟文件集(*.cs、*.Designer.cs 和 *.resx),并使用您要使用的现有 WinForm 文件。
4) 打开 VS 找到您现有的 WinForm,如果您愿意,可以从 VS IDE 重命名它,您需要更改旧 WinForm 的命名空间以匹配您的新项目。
在进行了大量测试并且在添加时未能正确识别表单后,即使在导入 .vb 时 .designer 和 .resx 正在复制,我发现Vidar 的解决方案是最好的,最少的 hacky 修复。
看来,如果项目中还没有这些引用(如果还没有表单),则该表单不会被识别为表单,而是作为代码模块导入。
这些可以根据上面的解决方案手动添加,也可以简单地
这不需要编辑任何 VS 配置文件,如问题的其他答案所示。
就我而言,我还注意到我一次只能广告一种形式。如果您尝试同时添加多个表单,您将看到这些表单是单独的项目。
Visual Studio 2012 中所需的一切如下:
您仍然可以使用“添加现有 iTem”
“添加现有iTem”,选择三个文件(.cs .resx .Designer.cs)
确保 .cs 文件中的“命名空间应用程序”与项目相同
现在您可以使用自动完成刚刚添加的表格。
这刚刚对我有用(我和你有同样的问题)。1.创建新的同名winform,添加一些东西(因此创建resx文件),保存并关闭。2. 用您原来的表格替换新创建的文件。3. 完成
将 .cs 文件从文件系统拖放到解决方案资源管理器中的项目树(例如):
如果它不是 Windows 窗体项目,请不要忘记引用。
尽管这是一篇旧帖子,但我遇到了与@MatthewRadford 上面描述的完全相同的问题。我的解决方法是只添加 .CS 文件(不要添加 .resx 文件),并允许 Visual Studio 在添加 .cs 文件后立即自动生成 .resx 文件。
但是,我找到了一个永久的解决方案。如果您在升级到新版本的 Visual Studio 后立即开始遇到此问题,则可能是在升级过程中,Active Reports 没有正确注册。解决方案是停用您的 Active Reports(使用 GrapeCity License Manager),卸载 Active Reports,从头开始重新安装 Active Reports,然后重新激活您的许可证。您现在应该能够同时添加 ReportName.cs 和 ReportName.resx 以及 Designer.cs 文件,同时让 Visual Studio 正确处理它们的依赖关系。
只需添加表单文件(form.vb 或 form.cs),其他文件将自动创建。
对我有用的最简单的解决方案是,
如果它打开,请关闭视觉工作室
将所有 3 个文件(.cs、.designer.cs、.resx)复制到所有其他表单所在的项目文件夹中。
现在使用 Visual Studio 打开项目。
构建项目
通过右键单击它并选择视图设计器打开表单,这将为表单生成正确的 Designer.cs。如果您有时不这样做,可能会出现错误提示
当前上下文中不存在 InitializeComponent。
之后,新表单将在解决方案资源管理器中显示为正常表单。
您所要做的就是传递 .cs 文件。(代码文件)