我从未能够将现有文件中的Form
成功添加到新项目中。
我在博客上看到你只添加* .cs文件并且依赖项进来了。好吧,我试过这个并且文件做了dragin并关联了* .designer和* .resx文件。 但是,表单图标不显示。相反,该文件看起来像普通的* .cs文件图像。而且,当我双击该文件时,我得到了代码而不是表单对象。
是否可以添加现有表单并正确识别它们?
答案 0 :(得分:29)
经过一些研究后,我发现了问题的根源。所有人都必须导入的是*.cs
文件是正确的。需要注意的是项目类型。如果在类库项目中工作,则必须执行另一个步骤。
System.Windows.Forms.dll
和System.Drawing
。*.cs
文件注意:
一个。只有在执行这些步骤后才能正确识别文件,然后尝试打开该文件。突然VS“醒来”并修复了文件。
B中。 步骤顺序无关紧要。如果您已导入* .cs文件,只需修复引用。
℃。如果缺少其他参考文献,例如DevExpress或其他第三方控件导入),* .cs文件在解决之前将无法正常显示。
答案 1 :(得分:20)
对不起P.Brian.Mackey,你的解决方案对我不起作用。它确实通过让VS认识到它是一个表单而不是代码文件来改进它,即给它是Icon(想象它添加了Form)
但我唯一能够完全解决问题的方法是在文本编辑器中手动编辑csproj文件。我并不是真的相信这是一个很好的解决方案并且可能非常危险,特别是考虑到我犯了两个输入错误而且完全破坏了项目,但是一旦我做对了它就确实有效。如果没有正确关闭标签或忘记文件扩展,也很难找到错误。
所以在通过'Add - >添加文件后,项目开始使用这些条目现有项目':( 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>
这不是我喜欢的解决方案,但它确实有效。如果有人有更好的解决方案,我很乐意倾听。
答案 2 :(得分:17)
这是不涉及关闭项目并重新开启的方法:
答案 3 :(得分:5)
您可以将现有表单导入项目。需要导入的文件取决于用于创建表单的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导入项目栏。首先,您需要将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表单复制的所有文件。确认后,您应该在解决方案资源管理器中正确查看新导入的表单。
答案 4 :(得分:3)
我在升级VisualBasic表单时遇到过类似的问题,从VisualStudio 2010到VisualStudio 2013.似乎有两种方法可以添加现有项目。
问题:如果我选择主窗口 - &gt;项目 - &gt;添加现有项目并仅拉入文件formname.vb,结果似乎只被解释为代码(没有设计者),指向原始文件(而不是复制到新项目)并有其他问题。
解决方案:如果相反,我转到解决方案资源管理器窗口,单击以选择项目(而不是树中的较低级别对象),然后在窗口中右键单击,生成的菜单提供添加 - >现有项目。使用此版本按预期工作,只需要找到formname.vb文件。没有手动复制文件,没有指向多个文件,没有编辑脚本等。我猜这同样适用于用C语言编写的表格。
答案 5 :(得分:2)
您实际上需要2个文件: - Form1.cs - Form1.Designer.cs
复制 - 将它们粘贴到您的新项目中(只需确保新项目中没有相同名称的此类表单)
答案 6 :(得分:1)
转到解决方案资源管理器并右键单击它然后添加现有项目,此处选择现有的表单路径。现在,这很重要,在您要使用现有表单的页面上,您必须添加头文件:
using "your existing project name";
答案 7 :(得分:1)
如果要创建Windows窗体库,最好是创建Windows窗体应用程序项目。然后删除默认表单(Form1),转到项目属性并将输出类型(或项目类型)从Windows窗体应用程序更改为类库。
这样输出将是一个DLL,但它将具有Windows窗体项目所需的引用。正如您所指出的那样,添加现有项目时不要添加相应的.Designer和.resx文件,只需添加它们的顶级/主文件。
答案 8 :(得分:1)
也许是因为使用了visual studio 2012,但所有这些解决方案都没有用。 AtConway提示编辑csproj文件。那个暗示很有效。
答案 9 :(得分:1)
经过大量测试并且在添加时无法正确识别表单,即使.designer和.resx在导入.vb时进行了复制,我发现Vidar's solution是最好的,最不实用的修复。< / p>
如果这些引用不在项目中(如果还没有表单),则表单不会被识别为表单而是作为代码模块导入。
这些可以根据上面的解决方案手动添加,也可以简单地
这不需要编辑任何VS配置文件,如问题的其他答案所示。
答案 10 :(得分:1)
假设您要导入名为YourFormName的表单。然后你应该只将YourFormName.cs添加到项目中 - 其余部分(YourFormName.designer.cs和YourFormName.resx)将自动添加。
步骤进行:
在VS2013中创建WinForms项目(在我的案例中.Net Framework为4.5.1) 右键单击项目 - &gt;添加 - &gt;现有项目...... 将要导入的winform复制到项目的文件夹中。如果要将其添加到新文件夹,则首先创建一个文件夹然后添加。 使用控件搜索任何WinForm(我添加了两个在VS2010中为.NET Framework 4创建的表单) 在不到10秒的时间里,visual studio添加了所有剩余的文件,我可以在设计模式下打开它。
答案 11 :(得分:1)
在尝试了几种方法后,我发现使用现有WinForm的最简单方法是:(类似于HaraldDuch的答案)并仅在VS2013上进行测试:
1)在将现有的WinForm移动到目标项目的源文件夹之前,使用源WinForm的相同名称创建一个虚拟WinForm。
2)保存时关闭VS解决方案。
3)使用您要使用的现有WinForm文件,从Windows资源管理器(关闭VS IDE)删除/替换新创建的虚拟WinForm文件集(* .cs,* .Designer.cs和* .resx)。 / p>
4)打开VS查找现有的WinForm,如果愿意,可以从VS IDE重命名,并且需要更改旧WinForm的命名空间以匹配新项目。
答案 12 :(得分:0)
最适合我的解决方案是
关闭Visual Studio(如果打开)
将所有3个文件(.cs,.designer.cs,.resx)复制到其他所有形式也都位于的项目文件夹中。
现在使用Visual Studio打开项目。
构建项目
通过右键单击表单并选择视图设计器来打开表单,这将为表单生成适当的designer.cs。如果您不这样做,有时可能会提示您错误
InitializeComponent在当前上下文中不存在。
此后,新表单将在解决方案资源管理器中看起来像普通表单。
答案 13 :(得分:0)
只需添加表单文件(form.vb或form.cs),其他文件将自动创建。
答案 14 :(得分:0)
虽然这是一篇很老的帖子,但我遇到了和@MatthewRadford上面描述的完全相同的问题。我的解决方法是仅添加.CS文件(不添加.resx文件),并允许visual studio在添加.cs文件后立即自动生成.resx文件。
但是,我找到了永久性解决方案。如果您在升级到Visual Studio的新版本后立即开始遇到此问题,则可能在升级期间未正确注册Active Reports。解决方案是停用活动报告(使用GrapeCity License Manager),卸载Active Reports,从头开始重新安装Active Reports,然后重新激活许可证。您现在应该能够同时添加ReportName.cs和ReportName.resx以及Designer.cs文件,同时让visual studio正确处理它们的依赖项。
答案 15 :(得分:0)
在解决方案资源管理器中将.cs文件从文件系统拖放到项目树(例如):
如果它不是Windows Forms项目,请不要忘记引用。
答案 16 :(得分:0)
这对我来说很有用(我和你有同样的问题)。 1.创建具有相同名称的新winform,添加内容(创建resx文件),保存并关闭。 2.用原始表单替换新创建的文件。 3.完成
答案 17 :(得分:0)
您仍然可以使用“添加现有的iTem”
“添加现有的iTem”,选择三个文件(.cs .resx .Designer.cs)
确保.cs文件中的“命名空间应用程序”与项目相同
现在您可以使用自动完成刚刚添加的表单。
答案 18 :(得分:0)
Visual Studio 2012中所需的全部内容如下:
答案 19 :(得分:0)
就我而言,我也注意到我一次只能刊登一张表格。如果您尝试同时添加多个表单,则可以将表单视为单独的项目。
答案 20 :(得分:-2)
您只需传递.cs文件即可。 (代码文件)