web-dev-qa-db-ja.com

既存のフォームを新しいプロジェクトにどのように追加しますか?

既存のファイルから新しいプロジェクトにFormを正常に追加できたことはありません。

ブログで* .csファイルだけを追加すると依存関係が追加されることを読みました。まあ、これを試してみたところ、ファイルはドラッグインして* .designerファイルと* .resxファイルを関連付けました。 しかし、フォームアイコンは表示されません。代わりに、ファイルは通常の* .csファイルイメージのように見えます。そして、ファイルをダブルクリックすると、フォームオブジェクトの代わりにコードビハインドが得られます。

既存のフォームを追加して適切に認識させることは可能ですか?

39
P.Brian.Mackey

さらに調査した結果、問題の原因を発見しました。インポートする必要があるのは*.csファイルだけです。警告はプロジェクトタイプにあります。クラスライブラリプロジェクトで作業している場合は、別の手順を実行する必要があります。

  1. System.Windows.Forms.dllおよびSystem.Drawingへの参照を追加します。
  2. *.csファイルをインポートします

ノート:

A.これらの手順を実行してからファイルを開こうとした後にのみ、ファイルが適切に認識されます。 VSが突然「起動」し、ファイルを修正します。

B. ステップの順序は関係ありません。すでに* .csファイルをインポートしている場合は、参照を修正するだけです。

C.他の参照が欠落している場合DevExpressまたは他のサードパーティコントロールのインポート)、これが解決されるまで、*。csファイルは正しく表示されません。

30
P.Brian.Mackey

P.Brian.Mackey、申し訳ありませんが、あなたのソリューションは私にとってはうまくいきませんでした。コードファイルではなくフォームであることをVSに認識させることで、それを改善しました。

しかし、問題を完全に修正することができた唯一の方法は、csprojファイルをテキストエディターで手動で編集することでした。これが素晴らしい解決策であり、潜在的に非常に危険であるとは私は本当に確信していません。タグを適切に閉じなかったり、ファイルの拡張子を忘れたりするなどの間違いを見つけることも困難です。

したがって、プロジェクトは、「追加->既存のアイテム」を使用してファイルを追加した後、これらのエントリで開始しました:(Pプロジェクトの外部で、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>

それは私が好きな解決策ではありませんが、うまくいきます。誰かがより良い解決策を持っているなら、私は聞いて満足です。

20
Matthew Radford

プロジェクトを閉じて再び開く必要はありません

  1. 3つの既存のフォームファイル(cs、Designer.cs、resx)を追加します。
  2. 次に、プロジェクトから追加した3つのファイルを除外します。
  3. [既存のアイテムエクスプローラーの追加]ウィンドウを開き、プロジェクトディレクトリに移動します。
  4. Csファイルを選択して追加します。
  5. 多田。すべて良い
20
brenth

既存のフォームをプロジェクトにインポートできます。インポートする必要があるファイルは、フォームの作成に使用されたVisual Studioのバージョンによって異なります。

異なるソリューションで、FooとBarの2つの別個のプロジェクトがあると仮定します。

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フォーム用にコピーしたすべてのファイルを選択します。確認後、新しくインポートされたフォームがソリューションエクスプローラーに正しく表示されるはずです。

5
npclaudiu

VisualStudio 2010からVisualStudio 2013へのVisualBasicフォームのアップグレード時に、同様の問題が発生しました。既存のアイテムを追加するには2つの方法があるようです。

問題:メインウィンドウ->プロジェクト->既存項目の追加を選択し、formname.vbファイルのみをプルすると、結果はコードのみ(デザイナーなし)として解釈され、コピーを取得するのではなく、元のファイルをポイントします新しいプロジェクトに)およびその他の問題があります。

解決策:代わりに、ソリューションエクスプローラーウィンドウに移動し、(ツリーの下位レベルオブジェクトではなく)プロジェクトをクリックして選択し、ウィンドウを右クリックすると、結果のメニューに[追加]-> [既存のアイテム]が表示されます。このバージョンを使用すると、期待どおりに機能し、formname.vbファイルを見つけるだけで済みます。手動でファイルをコピーしたり、複数のファイルを指定したり、スクリプトを編集したりする必要はありません。Cで書かれたフォームにも同じことが当てはまると思います。

3
James

実際には2つのファイルが必要です。-Form1.cs-Form1.Designer.cs

コピー-それらを新しいプロジェクトに貼り付けます(新しいプロジェクトに同じ名前のフォームが存在しないことを確認してください)

2
Mitja Bonca

Visual Studio 2012を使用したことが原因の可能性がありますが、これらのソリューションはすべて機能しませんでした。 AtConwayは、csprojファイルを編集するためのヒントを提供しました。そして、そのヒントはうまくいきました。

  1. 3つのファイルを追加するプロジェクトでソリューションを開きます。
  2. MyForm.cs/MyForm.Designer.csおよびMyForm.resXを追加するとします。それらがプロジェクトのフォルダーにあることを確認してください
  3. MyTempFormというダミー名のダミーフォーム(またはユーザーコントロール)を追加します。
  4. ソリューションを保存してDeveloper Studioで閉じます
  5. Windowsエクスプローラーで、3つのMyTempFormファイルを削除します
  6. MyTempFormの3つのMyFormファイルの名前を同じ拡張子で変更します。
  7. Developer Studio 2012でソリューションを再度開きます
  8. MyFormがMyTempFormとして完全に利用可能になったことを確認してください
  9. ソリューションエクスプローラーで、MyTempFormの名前をMyFormに戻します。
1

Windowsフォームのライブラリを作成する場合は、Windowsフォームアプリケーションプロジェクトを作成することをお勧めします。次に、デフォルトのフォーム(Form1)を削除し、プロジェクトのプロパティに移動して、出力タイプ(またはプロジェクトタイプ)をWindowsフォームアプリケーションからクラスライブラリに変更します。

この方法では、出力はDLLになりますが、Windowsフォームプロジェクトに必要な参照が含まれます。先ほど指摘したように、既存のアイテムを追加する場合、対応する.Designerおよび.resxは追加しないでくださいファイル、トップレベル/メインファイルを追加してください。

1
Lord of Scripts

ソリューションエクスプローラーに移動して右クリックし、既存のアイテムを追加します。ここでは、既存のフォームパスを選択します。現在、これは重要です。既存のフォームを使用するページで、ヘッダーファイルを追加する必要があります。

using "your existing project name";
1
agha

いくつかの方法を試した後、既存のWinFormを使用する最も簡単な方法は次のとおりであることがわかりました(HaraldDuchの答えに似ています)。VS2013でのみテストしました。

1)既存のWinFormを宛先プロジェクトのソースフォルダーに移動する前に、ソースWinFormと同じ名前を使用してダミーのWinFormを作成します。

2)保存中にVSソリューションを閉じます。

3)新しく作成したWinFormファイルのダミーセット(* .cs、*。Designer.cs、および* .resx)をWindowsエクスプローラー(VS IDE以外)から削除して、使用する既存のWinFormファイルに置き換えます。

4)VSを開いて既存のWinFormを検索し、VS IDEから名前を変更できます。必要に応じて、古いWinFormのネームスペースを新しいプロジェクトに合わせて変更する必要があります。

1
Prasa

.vbがインポートされたときに.designerと.resxがコピースルーを行っていたにもかかわらず、多くのテストを行い、追加時にフォームを正しく認識できなかった後、 Vidarのソリューション が最もハッキングの少ない修正であることがわかりました。

これらの参照がプロジェクトにまだない場合(まだフォームがない場合)、フォームはフォームとして認識されず、代わりにコードモジュールとしてインポートされます。

  • System.Drawing
  • System.Windows.Forms

これらは、上記のソリューションごとに手動で追加するか、単純に追加できます

  1. プロジェクトに新しい空白のフォームを追加します(これにより、上記の参照が自動的に追加されます)
  2. インポートする既存のフォーム.vb/.csを追加します(ソリューションエクスプローラーにフォームアイコンが表示され、コンテキストから「ビューデザイナー」が使用可能になります)
  3. 空白のフォームを削除するか、別の目的で使用します

これには、質問に対する他の回答に示されているVS構成ファイルを編集する必要はありません。

1
drewdqueue

YourFormNameというフォームをインポートするとします。次に、YourFormName.csをプロジェクトに追加するだけです。残りの部分(YourFormName.designer.csおよびYourFormName.resx)は自動的に追加されます。

手順:

WinFormsプロジェクト(私の場合、.Net Frameworkは4.5.1)をVS2013で作成します。プロジェクトを右クリック->追加->既存のアイテム...インポートするwinformをプロジェクトのフォルダーにコピーします。新しいフォルダーに追加する場合は、最初にフォルダーを作成してから追加します。 10秒未満のVisual Studioで、コントロール付きのWinForm(VS2010 for .NET framework 4で作成された2つのフォームを追加)を検索し、残りのすべてのファイルを追加し、これをデザインモードで開くことができます。

1
ankur

.csファイルをファイルシステムからソリューションエクスプローラーのプロジェクトツリーにドラッグアンドドロップします(例)。

  • mainForm.cs
  • mainForm.Designer.cs

Windows Formsプロジェクトでない場合は、参照を忘れないでください。

私の場合、一度に1つのフォームしか広告できないことにも注意しました。複数のフォームを同時に追加しようとすると、フォームは個別のアイテムとして表示されます。

0
brian

「既存のiTemを追加」を引き続き使用できます

  1. 「既存のiTemを追加」、3つのファイル(.cs .resx .Designer.cs)を選択します

  2. .csファイルの「名前空間アプリケーション」がプロジェクトと同じであることを確認してください

  3. これで、追加したフォームのオートコンプリートを使用できます。

0
han ping chen

フォームファイル(form.vbまたはform.cs)を追加するだけで、他のファイルが自動的に作成されます。

0
Somasekar

これはちょうど今私のために働いた(私はあなたと同じ問題を抱えている)。 1.同じ名前で新しいwinformを作成し、それに何かを追加して(resxファイルが作成される)、保存して閉じます。 2.新しく作成したファイルを元のフォームに置き換えます。 3.完了

0
Jan Macháček

Visual Studio 2012で必要なものは次のとおりです。

  1. フォームの3つのファイルをプロジェクトフォルダー(.cs、.designer.cs、および.resx)にコピーします。
  2. プロジェクトに移動し、既存のオブジェクトを追加します。
  3. .CSファイルを選択します
  4. インポートされ、標準のコードファイルのようになります。それをダブルクリックしても、上記のようにデザイナーは開きません。ただし、[すべてのファイルを保存]をクリックして、プロジェクトを閉じて再度開くだけで、フォームとして認識され、正常に動作するようになります。
0
Robb

これは古い投稿ですが、@ MatthewRadfordが上記で説明したのとまったく同じ問題を抱えていました。これに対する私の回避策は、.CSファイルのみを追加し(.resxファイルは追加しない)、. csファイルを追加した直後にVisual Studioが.resxファイルを自動的に生成できるようにすることでした。

しかし、永続的な解決策が見つかりました。 Visual Studioの新しいバージョンにアップグレードした直後にこの問題が発生し始めた場合、アップグレード中にActive Reportsが正しく登録されなかった可能性があります。解決策は、(GrapeCity License Managerを使用して)Active Reportsを非アクティブ化し、Active Reportsをアンインストールし、Active Reportsをゼロから再インストールし、ライセンスを再アクティブ化することです。 Visual Studioに依存関係を正しく処理させながら、ReportName.csとReportName.resx、およびDesigner.csファイルをすべて同時に追加できるようになりました。

0
Pavel

私のために働く最も簡単な解決策は、

  1. Visual Studioが開いている場合は閉じます

  2. すべての3つのファイル(.cs、.designer.cs、.resx)をプロジェクトフォルダーにコピーします。プロジェクトフォルダーには、他のすべてのフォームもあります。

  3. Visual Studioを使用してプロジェクトを開きます。

  4. プロジェクトを構築する

  5. フォームを右クリックしてビューデザイナーを選択してフォームを開きます。これにより、フォームに適切なdesigner.csが生成されます。これを時々しないと、エラーが出るかもしれません

InitializeComponentは現在のコンテキストに存在しません。

  1. これで、.csコードファイルを開いて編集できます。

この後、新しいフォームはソリューションエクスプローラーに通常のフォームのように表示されます。

0
Subbu