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

C# 如何将现有表单添加到新项目中?,c#,winforms,visual-studio-2010,C#,Winforms,Visual Studio 2010,我从未能够成功地将表单从现有文件添加到新项目中 我在一篇博客上读到,你只添加了*.cs文件,依赖项就进来了。好吧,我试过了,文件做了dragin并关联了*.designer和*.resx文件。但是,表单图标不显示。相反,该文件看起来像普通的*.cs文件图像。而且,当我双击文件时,我会得到隐藏的代码,而不是表单对象 是否可以添加现有表单并正确识别它们?您实际上需要2个文件: -表格1.cs -Form1.Designer.cs 复制-将它们粘贴到新项目中(只需确保新项目中没有同名的表单)您可以将现

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

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

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

您实际上需要2个文件: -表格1.cs -Form1.Designer.cs


复制-将它们粘贴到新项目中(只需确保新项目中没有同名的表单)

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

我假设您有两个独立的项目,Foo和Bar,采用不同的解决方案:

C:\
    Projects\
        Foo\
            Foo.sln
            Foo.vcproj
            Program.cs
            Foo.cs
            Foo.Designer.cs
            Foo.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项目上单击鼠标右键。选择[Add existing item]并在打开的对话框中选择为Foo表单复制的所有文件。确认后,您应该可以在解决方案资源管理器中正确地看到新导入的表单。

经过进一步研究,我发现了问题的根源。正确的做法是,只需导入
*.cs
文件。注意事项在于项目类型。如果在类库项目中工作,则必须执行另一个步骤

  • 添加对
    System.Windows.Forms.dll
    System.Drawing
    的引用
  • 导入
    *.cs
    文件
  • 注:

    答:只有在我执行这些步骤并尝试打开文件后,才能正确识别文件。突然VS“唤醒”并修复文件

    步骤的顺序并不重要。如果已经导入了*.cs文件,只需修复引用即可


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

    转到解决方案资源管理器,右键单击它,然后添加现有项,在此选择现有表单路径。现在,这一点很重要,在要使用现有表单的页面上,必须添加头文件:

    using "your existing project name";
    

    对不起,布莱恩·麦基,你的解决方案对我不起作用。它确实改进了它,让VS认识到它是一个表单而不是一个代码文件,也就是说,给它一个图标(想象一下它添加了表单)

    但我设法完全解决这个问题的唯一方法是在文本编辑器中手动编辑csproj文件。我真的不相信这是一个很好的解决方案,而且可能相当危险,特别是考虑到我犯了两个打字错误,并且完全破坏了项目,但一旦我做对了,它就成功了。也很难发现错误,例如没有正确关闭标记或忘记文件扩展名

    因此,在通过“添加-->现有项”添加文件后,项目以这些条目开始:(请注意,我确信您不必首先将文件复制到项目文件夹中,只需导航到文件存储在项目外部的位置,VS就会将其复制到您右键单击的文件夹中。提前复制当然也可以。)

    
    形式
    形式
    形式
    
    在文件的下面:

    <EmbeddedResource Include="Reports\GBudget1Report.resx" />
    <EmbeddedResource Include="Reports\GBudget2Report.resx" />
    
    <EmbeddedResource Include="Reports\GBudget1Report.resx">
      <DependentUpon>GBudget1Report.cs</DependentUpon>
    </EmbeddedResource>
    <EmbeddedResource Include="Reports\GBudget2Report.resx">
      <DependentUpon>GBudget2Report.cs</DependentUpon>
    </EmbeddedResource>
    
    
    
    将这些表单与项目中正常工作的现有表单进行比较(如果没有,另一个选项是在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>
    
    
    形式
    GBudget1Report.cs
    形式
    GBudget2Report.cs
    
    再往下看文件:

    <EmbeddedResource Include="Reports\GBudget1Report.resx" />
    <EmbeddedResource Include="Reports\GBudget2Report.resx" />
    
    <EmbeddedResource Include="Reports\GBudget1Report.resx">
      <DependentUpon>GBudget1Report.cs</DependentUpon>
    </EmbeddedResource>
    <EmbeddedResource Include="Reports\GBudget2Report.resx">
      <DependentUpon>GBudget2Report.cs</DependentUpon>
    </EmbeddedResource>
    
    
    GBudget1Report.cs
    GBudget2Report.cs
    

    这不是我喜欢的解决方案,但它很有效。如果有人有更好的解决方案,我很乐意倾听。

    如果要创建windows窗体库,最好创建windows窗体应用程序项目。然后删除默认表单(Form1),转到项目属性并将输出类型(或项目类型)从Windows窗体应用程序更改为类库


    这样,输出将是一个DLL,但它将具有windows窗体项目所需的引用。正如您所指出的,在添加现有项时,不要添加相应的.Designer和.resx文件,只需添加它们的顶层/主文件。

    在我的例子中,我还注意到,我一次只能添加一个表单。如果您尝试同时添加多个表单,您将看到表单作为单独的项。

    可能是因为使用了visual studio 2012,但所有这些解决方案都不起作用。 AtConway提示编辑csproj文件。这个暗示奏效了

  • 打开包含要添加三个文件的项目的解决方案
  • 假设您要添加MyForm.cs/MyForm.Designer.cs和MyForm.resX。确保它们位于项目的文件夹中
  • 添加一个伪名称为MyTempForm的伪表单(或usercontrol)
  • 保存解决方案并在Developer Studio中关闭它
  • 在windows资源管理器中删除三个MyTempForm文件
  • 在MyTempForm中重命名三个具有相同扩展名的MyForm文件
  • 在Developer Studio 2012中再次打开您的解决方案
  • 请确保您的MyForm现在作为MyTempForm完全可用
  • 在解决方案资源管理器中,将MyTempForm重命名回MyForm

  • 您所需要做的就是传递.cs文件。(代码文件)

    假设您想要导入一个名为YourFormName的表单。那么您应该只将YourFormName.cs添加到项目-t中