none
プロジェクトでForm1のこぴーをとり,これを貼り付けてForm2としたい RRS feed

  • 質問

  • プロジェクトでForm1のこぴーをとり,これを貼り付けてForm2としてみたのですが,このような操作ではエラーが続出してだめなようです。

    新たに,Form2を1から作り始めるといいのでしょうが,デザインもコードもほとんど同じですので,何かいい方法があるはずとは思ってみてもどうしたらいいものか・・・。

    どのようにして,Fom2(Form1のコピー)を追加できるのでしょうか。
    お教え願います。

    2013年4月23日 19:21

回答

  • imszさん

    私もよくコピーして作成してます。

    簡単なプロジェクトだと、赤○の3点をForm2に修正するだけで、とりあえずエラーは削除できますよ。

    すると、画面デザインを表示するとエラー画面になりますので、Form2.Designer.cs を確認して、イベントハンドラなどがForm1で定義されたままかと思いますので、それらのForm1をForm2に修正する必要があります。

    まず簡単なプロジェクトで試してみることをお勧めします。

    もっと簡単な方法があれば、私も知りたいところです。

    2013年4月24日 0:20
  • > どのようにして,Fom2(Form1のコピー)を追加できるのでしょうか。

    複数の方法が考えられます。

    1.Form1 のコードをコピーする
    「Windows フォームを追加」した後、Form1.cs と Form1.Designer.cs のメンバをコピーします。

    2.Form1 を継承する
    コピーしなくてもデザインやコードを Form2 で利用できます。オブジェクト指向の理解が必要です。

    3.共通するデザインやコードをユーザーコントロール化する
    一番お勧めの方法です。デザインやコードを一極化でき、管理が楽になります。

    それぞれ一長一短ありますので、色々調べるといいかと思います。


    ひらぽん http://d.hatena.ne.jp/hilapon/

    2013年4月24日 1:35
    モデレータ
  • 私は以下の手順を踏みます。

    1.まず、ソリューションエクスプローラーでForm1.csをコピーし、貼り付けます。そうすると「コピー ~ Form1.cs」ができますので、これをForm2.csにリネームします。

    2.ソリューションエクスプローラーでForm1.csを右クリックし、「プロジェクトから除外」を行います。

    3.Form2.csを開き、
     「public partial class Form1 : Form」の、Form1のところで右クリックし、「リファクター」→「名前の変更」で、「新しい名前」にForm2と入力し、「参照の変更のプレビュー」にチェックが入っていることを確認し、OKボタンを押します。
    開かれたプレビューを見ると、既にForm1がどこかで記述されている場合は、そこも変更の対象になりますから、必要に応じてそのチェックを外し、変更されないようにします。変更する全ての箇所のみにチェックが付いていることを確認し、適用ボタンを押します。
    これで、Visual Studioが必要なところを自働的にForm1からForm2に変えてくれます。
    上記2.の手順でForm1をプロジェクトから除外したのは、除外しておかないと元々のForm1までForm2に変更されてしまうからです。

    4.ソリューションエクスプローラーでForm1.csを右クリックし、「プロジェクトに含める」をクリックします。
    ソリューションエクスプローラーに表示されていない場合は、ソリューションエクスプローラーの一番最初にあるアイコンのうち、「すべてのファイルを表示」をクリックして下さい。これで、プロジェクトから除外されているファイルも表示されるようになります。

    以上です。

    #(追記)
    情報が足らず、混乱させたようで申し訳ありませんでした。追記をしましたので確認してみて下さい。追記は太字に下線が引かれている部分です。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2013年4月24日 3:01
    モデレータ
  • 私もtrapemiyaさんの方法を試してみました。

    同じようにForm1が消え困りましたが、ソリューションエクスプローラーの上部に「全てのファイルを表示」ボタンがあり、それを押すとForm1が表示されました。

    便利な機能なので、今後使っていきたいと思います。

    あとは必要に応じて、Form1_Loadなどのイベント名が変更されていませんので、修正すれば良いですね。
    • 編集済み kentahoga 2013年4月24日 10:19
    • 回答としてマーク imsz 2013年4月24日 20:38
    2013年4月24日 10:11
  • imszさん、kentaro_さん、私の記述が足らず、混乱させてしまったようで申し訳ありませんでした。
    また、どこかでForm1が使われていると、それもそのままではForm2に置換されてしまいますから、「参照の更新のプレビュー」で確認し、変更されてはまずいところは変更されないようにチェックを外す必要があります。
    例えば、
    var form = new Form1();
    と記述されているところが、
    var form = new Form2();
    に置換されてしまわないように、「参照の更新のプレビュー」でチェックを外し、置換されないようにする必要があります。

    先の私の発言に追記をしていますので、そちらも確認してみて下さい。

    よろしくお願いいたします。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク imsz 2013年4月24日 20:38
    2013年4月24日 14:00
    モデレータ

すべての返信

  • 「こぴーをとり」とは具体的に何をしていますか?
    それと問題を解決したいならば「エラーが続出」ではなく「こんなエラーが出た」と書くべきでしょう。

    2013年4月23日 23:10
  • imszさん

    私もよくコピーして作成してます。

    簡単なプロジェクトだと、赤○の3点をForm2に修正するだけで、とりあえずエラーは削除できますよ。

    すると、画面デザインを表示するとエラー画面になりますので、Form2.Designer.cs を確認して、イベントハンドラなどがForm1で定義されたままかと思いますので、それらのForm1をForm2に修正する必要があります。

    まず簡単なプロジェクトで試してみることをお勧めします。

    もっと簡単な方法があれば、私も知りたいところです。

    2013年4月24日 0:20
  • > どのようにして,Fom2(Form1のコピー)を追加できるのでしょうか。

    複数の方法が考えられます。

    1.Form1 のコードをコピーする
    「Windows フォームを追加」した後、Form1.cs と Form1.Designer.cs のメンバをコピーします。

    2.Form1 を継承する
    コピーしなくてもデザインやコードを Form2 で利用できます。オブジェクト指向の理解が必要です。

    3.共通するデザインやコードをユーザーコントロール化する
    一番お勧めの方法です。デザインやコードを一極化でき、管理が楽になります。

    それぞれ一長一短ありますので、色々調べるといいかと思います。


    ひらぽん http://d.hatena.ne.jp/hilapon/

    2013年4月24日 1:35
    モデレータ
  • 私は以下の手順を踏みます。

    1.まず、ソリューションエクスプローラーでForm1.csをコピーし、貼り付けます。そうすると「コピー ~ Form1.cs」ができますので、これをForm2.csにリネームします。

    2.ソリューションエクスプローラーでForm1.csを右クリックし、「プロジェクトから除外」を行います。

    3.Form2.csを開き、
     「public partial class Form1 : Form」の、Form1のところで右クリックし、「リファクター」→「名前の変更」で、「新しい名前」にForm2と入力し、「参照の変更のプレビュー」にチェックが入っていることを確認し、OKボタンを押します。
    開かれたプレビューを見ると、既にForm1がどこかで記述されている場合は、そこも変更の対象になりますから、必要に応じてそのチェックを外し、変更されないようにします。変更する全ての箇所のみにチェックが付いていることを確認し、適用ボタンを押します。
    これで、Visual Studioが必要なところを自働的にForm1からForm2に変えてくれます。
    上記2.の手順でForm1をプロジェクトから除外したのは、除外しておかないと元々のForm1までForm2に変更されてしまうからです。

    4.ソリューションエクスプローラーでForm1.csを右クリックし、「プロジェクトに含める」をクリックします。
    ソリューションエクスプローラーに表示されていない場合は、ソリューションエクスプローラーの一番最初にあるアイコンのうち、「すべてのファイルを表示」をクリックして下さい。これで、プロジェクトから除外されているファイルも表示されるようになります。

    以上です。

    #(追記)
    情報が足らず、混乱させたようで申し訳ありませんでした。追記をしましたので確認してみて下さい。追記は太字に下線が引かれている部分です。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2013年4月24日 3:01
    モデレータ
  • kentaro_さん,ひらぽんさん,trapemiyaさん,ありがとうございます。
    Hotmailのアカウントを忘れてしまって,思い出すまで時間がかかり,返信が遅くなりました。

    trapemiyaさんが教えてくださった方法で試してみました。

    2の段階でForm1を除外すると,Form1の表示がソリューションエクスプローラから消えてしまいました。

    そのため,
    4の段階で,Form1をプロジェクトに含めることができませんでした。(Form1を右クリックすることができませんでした)

    2013年4月24日 9:27
  • 私もtrapemiyaさんの方法を試してみました。

    同じようにForm1が消え困りましたが、ソリューションエクスプローラーの上部に「全てのファイルを表示」ボタンがあり、それを押すとForm1が表示されました。

    便利な機能なので、今後使っていきたいと思います。

    あとは必要に応じて、Form1_Loadなどのイベント名が変更されていませんので、修正すれば良いですね。
    • 編集済み kentahoga 2013年4月24日 10:19
    • 回答としてマーク imsz 2013年4月24日 20:38
    2013年4月24日 10:11
  • imszさん、kentaro_さん、私の記述が足らず、混乱させてしまったようで申し訳ありませんでした。
    また、どこかでForm1が使われていると、それもそのままではForm2に置換されてしまいますから、「参照の更新のプレビュー」で確認し、変更されてはまずいところは変更されないようにチェックを外す必要があります。
    例えば、
    var form = new Form1();
    と記述されているところが、
    var form = new Form2();
    に置換されてしまわないように、「参照の更新のプレビュー」でチェックを外し、置換されないようにする必要があります。

    先の私の発言に追記をしていますので、そちらも確認してみて下さい。

    よろしくお願いいたします。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク imsz 2013年4月24日 20:38
    2013年4月24日 14:00
    モデレータ
  • trapemiyaさん,kentaro_さん,ひらぽんさん,galacoさん,ありがとうございました。

    コントロールの数とコードの行数が大量でしたので,簡単にFormを複製する方法があることを教えていただきとても助かりました。

    作っていたアプリも,多くの皆さんに助けていただいたおかげで完成できそうです。あらためてお礼申します,ありがとうございました。

    2013年4月24日 20:57