2012-04-25 108 views
30

我從來沒有能夠成功地將新的Form文件作爲現有文件添加到新項目中。我在博客上看到,您只添加了* .cs文件,並且依賴項進來了。嗯,我試過這個,並且文件沒有拖動並關聯* .designer和* .resx文件。但是,表單圖標不顯示。相反,該文件看起來像一個普通的* .cs文件圖像。而且,當我雙擊文件時,我會獲得代碼而不是表單對象。如何將現有表單添加到新項目中?

是否可以添加現有的表單而不重新創建它們?

+1

看看實際的'csproj'文件本身。它是XML,可以手動編輯 - 查看現有表單的結構,並複製新表單的結構。 – Oded 2012-04-25 13:30:37

+0

這對我來說一直有效,從來沒有任何問題,您是否可能試圖添加一個表單到控制檯項目?看起來很奇怪,它不起作用。 – Jason 2012-04-25 13:32:29

+1

我可以說,在VS2012中,唯一能解決問題的方法就是編輯'.csproj'文件並手動創建依賴關係(不是太難)。否則,「.Designer.cs」和「.resx」文件在解決方案資源管理器中從不出現在表單正下方。 @MatthewRadford的解決方案是唯一爲我工作的人。 – atconway 2013-07-01 22:12:56

回答

22

經過一些研究,我發現問題的根源。所有必須導入的文件都是*.cs文件是正確的。警告在於項目類型。如果在類庫項目中工作,則必須執行另一個步驟。

  1. 添加對System.Windows.Forms.dllSystem.Drawing的引用。
  2. 導入*.cs文件

注:

A.後,我執行了這些步驟,然後嘗試打開該文件中的文件只有正確識別。突然VS「醒來」並修復文件。
B.步驟順序無關緊要。如果您已經導入* .cs文件,只需修復引用。
C.如果缺少其他引用(E.G. DevExpress或其他第三方控制導入),* .cs文件將無法正確顯示,直到解決此問題。

+2

我也必須在添加引用後關閉並重新打開我的解決方案。然後重新添加.cs文件 – Koenyn 2012-11-28 06:10:30

2

你實際上需要2個文件: - Form1.cs中 - Form1.Designer.cs

複製 - 粘貼它們到新的項目(只需確保不存在這樣的形式在新的項目相同nameexisting )

+0

別忘了Form1.Designer.resx。缺失的圖標看起來不太好。 ;) – Skalli 2012-04-25 13:51:26

5

您可以將現有表單導入到項目中。需要導入的文件取決於用於創建表單的Visual Studio版本。

我會假設你有兩個單獨的項目,Foo和酒吧,在不同的解決方案:

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 

現在,說你需要導入FHE形式富到項目欄。首先,你需要伴隨美孚的所有文件複製到該酒吧項目文件夾:

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 

然後,打開Bar.sln在Visual Studio和Solution Explorer中的欄右擊項目。選擇[添加現有項目]並選擇在打開的對話框中爲Foo表單複製的所有文件。確認後,您應該在解決方案資源管理器中正確看到新導入的表單。

+0

在我的情況下,也有三個文件,但命名有點不同。我在VS2010 Ultimate上,文件名是:'MyForm1.cs','MyForm1.Designer.cs','MyForm1.resx'。據我所見,任何地方都沒有'MyForm1.Designer.resx'。這是一個錯字嗎?你在什麼版本的VS上? – 2012-10-16 14:56:34

+0

似乎他們在VS 2010中的.resx文件名中刪除了「.Designer」部分。無論如何,這應該仍然有效。 – npclaudiu 2012-10-16 19:19:47

+0

爲什麼,當然是這樣。對於非常清晰的文件樹佈局,它也是+1。我只是好奇你爲**這些**文件名所用的版本。可能很高興知道以防萬一。我不是故意批評 - 如果聽起來那麼抱歉。 – 2012-10-17 04:14:00

1

轉到解決方案資源管理器,右鍵單擊它然後添加現有的項目,在這裏選擇現有的表單路徑。現在,這一點很重要,在您要使用現有表單的頁面上,您必須添加標題文件:

using "your existing project name"; 
+0

作爲測試的一部分,我喜歡在自己的測試解決方案上創建用戶控件。一旦我滿意,我將用戶控制文件(* .cs,* .resx,* .designer.cs)複製到目標文件夾。然後我使用NtePad ++編輯更改命名空間的designer.cs文件。例如,假設我的testProject是Tester,我的目標項目是Boo。在designer.cs文件中,我將'namespace testProject'更改爲'namespace Boo'。 – 2013-10-31 14:51:56

17

對不起P.Brian。麥基,你的解決方案並不適合我。它確實通過讓VS認識到它是一種形式而不是代碼文件來改善它,即賦予它是圖標(想象它添加了表單)

但是唯一的辦法就是編輯csproj在文本編輯器中手動文件。我並不確信這是一個很好的解決方案,而且可能相當危險,尤其是考慮到我犯了兩次打字錯誤,並且徹底破壞了這個項目,但是一旦我找到了正確的方案,它就會發揮作用。也很難找到錯誤,比如沒有正確關閉標籤或忘記擴展文件。

因此該項目開始了與這些項目通過「添加 - >現有項」添加文件後:(附言:我敢肯定你沒有將文件先複製到項目文件夾,只需導航到在那裏它們被存儲在項目外和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" /> 

將這些與工作中的現有表格進行比較rectly(另一種選擇是,如果你沒有一個,就是建立在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

這是我發現在VS2012中工作的唯一解決方案,用於在將項目複製並添加到項目中之後將現有表單添加到新項目中。 – atconway 2013-07-01 22:14:42

+0

是的,這是一個很好的觀點,我使用VS2012。 – 2014-11-14 11:56:47

+0

這適用於VS2013中的我 – demonplus 2015-08-31 18:28:56

1

如果你想創建窗口的形成是更好,如果你創建一個Windows窗體應用程序項目庫。然後刪除默認窗體(Form1),轉到項目屬性並將輸出類型(或項目類型)從Windows窗體應用程序更改爲類庫。

這樣的輸出將是一個DLL,但它會讓你需要一個Windows窗體項目的引用。正如您所指出的那樣,添加現有項目時不要添加其對應的.Designer和.resx文件,只需添加其頂級/主文件即可。

0

在我的情況,我也注意到,我可以在同一時間只有一個廣告形式。如果您嘗試同時添加多個表單,您將會看到表單爲單獨項目。

1

也許是因爲使用的Visual Studio 2012的,但所有這些解決方案沒有奏效。 Atollway給出了編輯csproj文件的提示。那暗示奏效了。

  1. 打開您想要添加三個文件的項目的解決方案。
  2. 假設您想要添加MyForm.cs/MyForm.Designer.cs和MyForm.resX。確保它們位於項目的文件夾中
  3. 用虛擬名稱添加一個虛擬表單(或usercontrol):MyTempForm。
  4. 保存解決方案和開發工作室
  5. 關閉它在Windows資源管理器中刪除MyTempForm三個MyTempForm文件
  6. 重命名你的三個MyForm的文件,使用相同的擴展。
  7. Developer Studio裏再次打開您的解決方案2012
  8. 看到你的MyForm的現在完全可以作爲MyTempForm
  9. 在Solution Explorer中重命名MyTempForm回MyForm的
-2

所有你必須是傳遞.cs文件。 (代碼文件)

1

假設您要導入名爲YourFormName的窗體。然後,您應該只添加YourFormName.cs到項目 - 其餘部分(YourFormName.designer.cs和YourFormName.resx)將自動添加。

步驟:

創建WinForms項目在VS2013 (在我的情況.NET框架是4.5.1)項目上右擊 - >添加 - >現有項... 副本的winform要導入到您項目的文件夾。如果您想將其添加到新文件夾,請先創建一個文件夾然後添加。 搜索任何帶有控件的WinForm(我添加了兩個在VS2010中爲.NET框架4創建的窗體) 小於10秒Visual Studio添加了所有剩餘的文件,我可以在設計模式下打開它。

0

所有這一切需要在Visual Studio 2012是以下內容:形式進入項目文件夾(的.cs,和了.Designer.cs的.resx)

  • 轉到

    1. 複製三個文件該項目並添加一個現有的對象。
    2. 選擇.CS文件
    3. 它將導入並看起來像一個標準的代碼文件。雙擊它不會打開上面提到的設計器。然而,只需點擊保存所有文件,然後關閉並重新打開該項目,現在它被識別爲一個窗體並且正常工作。
  • +0

    您的答案不包含任何其他答案中至少沒有提供的信息。 – 2014-05-13 17:26:19

    3

    從升級到VisualStudio 2013的VisualBasic窗體升級VisualBasic窗體時,我剛遇到類似的問題。似乎有兩種添加現有項目的方法。

    問題:如果我選擇主窗口 - >項目 - >添加現有項目,並只提取文件formname.vb,結果似乎被解釋爲代碼(沒有設計者),指向原始文件(寧比複製新項目)還有其他問題。

    解決方案:如果改爲進入解決方案資源管理器窗口,請單擊以選擇項目(而不是樹中較低級別的對象),然後在窗口中單擊右鍵,出現的菜單提供Add-> Existing項目。使用此版本按預期工作,只需要我找到formname.vb文件。沒有手動複製文件,沒有指向多張文件,沒有編輯腳本,等我猜這同樣適用於C語言編寫的

    0

    形式仍然可以使用「添加現有項目」

    1. 「添加現有的iTem」,選擇三個文件(.cs .resx.Designer。CS)

    2. 使你的cs文件確認「命名空間應用」是一樣的項目

    3. 現在你可以使用自動完成你剛纔添加的形式。

    1

    嘗試多種方法對我來說,使用現有的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的命名空間以匹配你的新項目。

    +0

    這在VS2015中適用於我。必須在Designer中進行一些編輯才能更改項目名稱。 – Tim 2017-04-20 17:55:56

    8

    我知道這是一個老問題,但我想給出我的答案,不涉及關閉項目並重新打開它。

    1. 添加3個現有表單文件(cs,Designer.cs和resx)。
    2. 現在,排除剛剛從項目中添加的3個文件。
    3. 打開添加現有項目資源管理器窗口並轉到您的項目目錄。
    4. 選擇cs文件並添加。
    5. 田田。所有不錯
    +0

    這項工作完美 – 2017-08-23 22:46:52

    +0

    輝煌。這是最簡單的方法。 – 2018-03-05 20:21:04

    0

    這對我來說剛剛工作(我和你有同樣的問題)。 1.創建具有相同名稱的新winform,添加一些東西(所以resx文件被創建),保存並關閉。 2.用原始表單替換新創建的文件。 3.完成

    0

    拖放從文件系統下降的.cs文件在解決方案資源管理項目樹(例如):

    • mainForm.cs
    • mainForm.Designer.cs

    如果它不是Windows Forms項目,請不要忘記引用。

    0

    儘管這是一箇舊帖子,但我的確遇到了與上面描述的@MatthewRadford相同的問題。我的解決方法是隻添加.CS文件(不要添加.resx文件),並允許Visual Studio在添加.cs文件後自動生成.resx文件。我發現永久性解決方案。如果升級到新版Visual Studio後立即出現此問題,升級過程中可能無法正確註冊Active Reports。解決方案是停用Active Reports(使用GrapeCity License Manager),卸載活動報告,從頭開始重新安裝活動報告,然後重新激活許可證。您現在應該可以同時添加ReportName.cs和ReportName.resx以及Designer.cs文件,同時讓Visual Studio正確處理它們的依賴關係。

    0

    只需添加表單文件(form.vb或form.cs)即可自動創建其他文件。

    0

    經過大量測試,添加後未能正確識別窗體,即使.designer和.resx在導入.vb時複製,我發現Vidar's solution是最好的,最不起作用的修復程序。

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

    • System.Drawing中
    • System.Windows.Forms的

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

    1. 添加一個新的空白表格該項目(這將自動添加上述參考)
    2. 添加現有表單.vb/.cs您要導入(它現在將顯示在Solu中的表單圖標重刑Explorer和「視圖設計器」將可從上下文中)
    3. 刪除空白表單或將其用於其他東西

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

    相關問題