如何将现有表单添加到新项目?

P.B*_*key 40 c# visual-studio-2010 winforms

我从未能够成功地将Form现有文件添加到新项目中.

我在博客上看到你只添加*.cs文件并且依赖项进来.好吧,我试过这个并且文件做了dragin并关联*.designer和*.resx文件. 但是,窗体图标不会显示.相反,该文件看起来像普通的*.cs文件图像.而且,当我双击该文件时,我得到了代码而不是表单对象.

是否可以添加现有表单并正确识别它们?

P.B*_*key 31

经过一些研究后,我发现了问题的根源.所有人必须导入的是*.cs文件是正确的.需要注意的是项目类型.如果在类库项目中工作,则必须执行另一个步骤.

  1. 添加对System.Windows.Forms.dll和的引用System.Drawing.
  2. 导入*.cs文件

笔记:

答:只有在执行这些步骤后才能正确识别文件,然后尝试打开文件.突然VS"醒来"并修复了文件.

B. 步骤顺序无关紧要.如果您已导入*.cs文件,只需修复引用即可.

C.如果缺少其他引用,例如DevExpress或其他第三方控件导入),*.cs文件将无法正确显示,直到解决此问题.

  • 添加引用后,我还必须关闭并重新打开我的解决方案.然后重新添加.cs文件 (2认同)

bre*_*nth 22

这是一种不涉及关闭项目并重新打开它的方法:

  1. 添加3个现有表单文件(cs,Designer.cs和resx).
  2. 现在,排除刚从项目中添加的3个文件.
  3. 打开"添加现有项目资源管理器"窗口,然后转到项目目录.
  4. 选择cs文件并添加.
  5. 田田.都好

  • 有效,但有一个快速警告:一次对一种表格执行第 4 步。如果您为不同的表单选择多个 .cs 文件,则不会正确添加它们。 (3认同)
  • 参与 VS 2019 (3认同)

Mat*_*ord 21

对不起P.Brian.Mackey,你的解决方案对我不起作用.它确实通过让VS认识到它是一个表单而不是一个代码文件来改进它,即给它是Icon(想象它添加了Form)

但只有我设法完全解决问题的方法是在文本编辑器中手动编辑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>
Run Code Online (Sandbox Code Playgroud)

并进一步在文件中:

<EmbeddedResource Include="Reports\GBudget1Report.resx" />
<EmbeddedResource Include="Reports\GBudget2Report.resx" />
Run Code Online (Sandbox Code Playgroud)

将这些与正确工作的项目中的现有表单进行比较(其他选项是如果你没有一个,就是在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>
Run Code Online (Sandbox Code Playgroud)

再往下文件:

<EmbeddedResource Include="Reports\GBudget1Report.resx">
  <DependentUpon>GBudget1Report.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Reports\GBudget2Report.resx">
  <DependentUpon>GBudget2Report.cs</DependentUpon>
</EmbeddedResource>
Run Code Online (Sandbox Code Playgroud)

这不是我喜欢的解决方案,但它确实有效.如果有人有更好的解决方案,我很高兴听.

  • 这是我发现在VS2012中使用的唯一解决方案,用于在复制现有表单并将其添加到项目后将其添加到新项目中. (2认同)

npc*_*diu 5

您可以将现有表单导入项目.需要导入的文件取决于用于创建表单的Visual Studio的版本.

我将假设你有两个独立的项目,Foo和Bar,在不同的解决方案中:

C:\
    Projects\
        Foo\
            Foo.sln
            Foo.vcproj
            Program.cs
            Foo.cs
            Foo.Designer.cs
            Foo.Designer.resx
Run Code Online (Sandbox Code Playgroud)

C:\
    Projects\
        Bar\
            Bar.sln
            Bar.vcproj
            Program.cs
            Bar.cs
            Bar.Designer.cs
            Bar.Designer.resx
Run Code Online (Sandbox Code Playgroud)

现在,假设您需要将表格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
Run Code Online (Sandbox Code Playgroud)

然后,在Visual Studio中打开Bar.sln,右键单击解决方案资源管理器中的Bar项目.选择[添加现有项目],然后在打开的对话框中选择为Foo表单复制的所有文件.确认后,您应该在解决方案资源管理器中正确地看到新导入的表单.