簡體   English   中英

如何將現有表單添加到新項目?

[英]How do you add an existing form to a new project?

我從來沒有能夠成功地將現有文件中的Form添加到新項目中。

我在博客上讀到,您只添加了 *.cs 文件並且依賴項進來了。好吧,我嘗試了這個,文件確實拖動並關聯了 *.designer 和 *.resx 文件。 但是,表單圖標不顯示 相反,該文件看起來像一個普通的 *.cs 文件圖像。 而且,當我雙擊文件時,我得到的是后面的代碼而不是表單對象。

是否可以添加現有表單並正確識別它們?

這是一種不涉及關閉項目並重新打開它的方法:

  1. 添加 3 個現有的表單文件(cs、Designer.cs 和 resx)。
  2. 現在,排除您剛剛從項目中添加的 3 個文件。
  3. 打開 Add existing item explorer 窗口並轉到您的項目目錄。
  4. 選擇cs文件並添加。
  5. 多田。 都好

經過更多研究,我發現了問題的根源。 正確的是,只需要導入*.cs文件。 需要注意的是項目類型。 如果在類庫項目中工作,則必須執行另一個步驟。

  1. 添加對System.Windows.Forms.dllSystem.Drawing的引用。
  2. 導入*.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 文件。 這個提示奏效了。

  1. 打開包含要添加三個文件的項目的解決方案。
  2. 假設您要添加 MyForm.cs / MyForm.Designer.cs 和 MyForm.resX。 確保它們在您項目的文件夾中
  3. 添加一個具有虛擬名稱的虛擬表單(或用戶控件):MyTempForm。
  4. 保存解決方案並在 Developer Studio 中將其關閉
  5. 在 Windows 資源管理器中刪除三個 MyTempForm 文件
  6. 使用相同的擴展名重命名 MyTempForm 中的三個 MyForm 文件。
  7. 在 Developer Studio 2012 中再次打開您的解決方案
  8. 看到您的 MyForm 現在完全可以用作 MyTempForm
  9. 在解決方案資源管理器中將 MyTempForm 重命名為 MyForm

假設您要導入名為 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 修復。

看來,如果項目中還沒有這些引用(如果還沒有表單),則該表單不會被識別為表單,而是作為代碼模塊導入。

  • 系統繪圖
  • System.Windows.Forms

這些可以根據上面的解決方案手動添加,也可以簡單地

  1. 向項目添加一個新的空白表單(這會自動添加上面的引用)
  2. 添加要導入的現有表單 .vb/.cs(它現在將在解決方案資源管理器中顯示表單圖標,並且可以從上下文中使用“視圖設計器”)
  3. 刪除空白表格或將其用於其他用途

這不需要編輯任何 VS 配置文件,如問題的其他答案所示。

就我而言,我還注意到我一次只能廣告一種形式。 如果您嘗試同時添加多個表單,您將看到這些表單是單獨的項目。

Visual Studio 2012 中所需的一切如下:

  1. 將表單的三個文件復制到項目文件夾中(.cs、.designer.cs 和 .resx)
  2. 轉到項目並添加現有對象。
  3. 選擇 .CS 文件
  4. 它將導入並看起來像一個標准代碼文件。 如上所述,雙擊它不會打開設計器。 但是,只需單擊保存所有文件,然后關閉並重新打開項目,現在它被識別為表單並且可以正常工作。

您仍然可以使用“添加現有 iTem”

  1. “添加現有iTem”,選擇三個文件(.cs .resx .Designer.cs)

  2. 確保 .cs 文件中的“命名空間應用程序”與項目相同

  3. 現在您可以使用自動完成剛剛添加的表格。

這剛剛對我有用(我和你有同樣的問題)。 1.創建新的同名winform,添加一些東西(因此創建resx文件),保存並關閉。 2. 用您原來的表格替換新創建的文件。 3. 完成

將 .cs 文件從文件系統拖放到解決方案資源管理器中的項目樹(例如):

  • 主窗體.cs
  • mainForm.Designer.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),其他文件將自動創建。

對我有用的最簡單的解決方案是,

  1. 如果它打開,請關閉視覺工作室

  2. 將所有 3 個文件(.cs、.designer.cs、.resx)復制到所有其他表單所在的項目文件夾中。

  3. 現在使用 Visual Studio 打開項目。

  4. 構建項目

  5. 通過右鍵單擊它並選擇視圖設計器打開表單,這將為表單生成正確的 Designer.cs。 如果您有時不這樣做,可能會出現錯誤提示

當前上下文中不存在 InitializeComponent。

  1. 現在您可以打開並編輯 .cs 代碼文件

之后,新表單將在解決方案資源管理器中顯示為正常表單。

我嘗試了幾乎所有提出的解決方案,但沒有一個真正適合我。 我終於自己編輯了 csproj 文件。 在我將另一個項目中的表單添加到我的新項目中后,我打開了 csproj 文件,我注意到 Visual Studio 添加的引用缺少部分。 因此,我根據以下模板編輯了節點。

<Compile Include="NewForm.cs">
  <SubType>Form</SubType>
</Compile>
<Compile Include="NewForm.Designer.cs">
  <DependentUpon>NewForm.cs</DependentUpon>
</Compile>

然后我重新啟動了 Visual Studio,一切都很順利。

您所要做的就是傳遞 .cs 文件。 (代碼文件)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM