48

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

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

既存のフォームを追加して、正しく認識させることはできますか?

4

21 に答える 21

35

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

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

ノート:

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

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

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

于 2012-04-25T13:58:39.610 に答える
25

申し訳ありませんが、P.Brian.Mackey さんの解決策はうまくいきませんでした。VSにコードファイルではなくフォームであることを認識させることで改善しました。つまり、アイコンを指定しました(フォームを追加したと想像してください)

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

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

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

于 2013-01-24T15:24:29.087 に答える
5

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

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

于 2012-04-25T13:48:21.923 に答える
3

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

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

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

于 2014-05-27T20:07:53.953 に答える
2

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

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

于 2012-04-25T13:36:38.300 に答える
1

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

using "your existing project name";
于 2012-08-24T15:07:11.247 に答える
1

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

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

  • System.Drawing
  • System.Windows.Forms

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

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

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

于 2016-11-17T01:32:40.017 に答える
1

いくつかの方法を試した後、既存の 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 の名前空間を新しいプロジェクトに合わせて変更する必要があります。

于 2015-02-24T13:12:23.143 に答える
1

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

この方法では、出力は DLL になりますが、Windows フォーム プロジェクトに必要な参照が含まれます。ご指摘のとおり、既存のアイテムを追加するときは、対応する .Designer および .resx ファイルを追加せず、最上位/メイン ファイルを追加するだけです。

于 2013-01-27T17:38:10.250 に答える
0

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

于 2015-09-03T09:04:46.713 に答える
0

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

于 2016-03-24T09:21:15.390 に答える
0

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

于 2013-11-07T05:22:26.323 に答える
0

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

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

于 2015-12-18T20:59:25.190 に答える
0

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

  • mainForm.cs
  • mainForm.Designer.cs

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

于 2015-11-20T07:16:01.823 に答える
-2

.cs ファイルを渡すだけです。(コードファイル)

于 2014-02-13T01:29:12.317 に答える