- PR -

ソリューションエクスプローラでフォームを複製するとエラーになる。

投稿者投稿内容
だんじり
大ベテラン
会議室デビュー日: 2007/08/10
投稿数: 155
お住まい・勤務地: 神奈川県
投稿日時: 2007-08-31 15:00
WindowsXP VB2005EEを使って、Windowsアプリケーションを開発中の新人です。

同じようなフォームを作成したく、ソリューションエクスプローラで編集メニュー
の「コピー」 → 「貼りつけ」すると、コピー先は正常に動作しますが、コピー元
は次のようなエラーが発生して、コピー元のフォームが使えなくなってしまいます。
同じようなフォームを作成するにはどのような方法があるのでしょうか。
よろしくご指導下さい。

−−−−−−−−−−− エラー内容 −−−−−−−−−−−
「デザイナの読み込み時に 1 つ以上のエラーが発生しました。エラーは以下に一覧
表示されます。コードの変更が必要なエラーもありますが、プロジェクトを再度ビル
ドすると解決できるエラーもあります。」
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2007-08-31 15:31
さかもとと申します。

フォームを新規追加する際に「継承されたフォーム」を選択することができます。

「同じようなフォーム」というのが明確にどこまで同じかは分かりませんが、ご希望に副えるかもしれません。

詳しくは検索をしてみてください。
_________________
------------------------------------------
拝啓、さかもとと申します♪
だんじり
大ベテラン
会議室デビュー日: 2007/08/10
投稿数: 155
お住まい・勤務地: 神奈川県
投稿日時: 2007-08-31 16:30
さかもとさん、いつもお世話になっています。

私はフォームを新規追加する際にソリューションエクスプローラで右クリックして
リスト表示される中から「追加」を選び →「新しい項目」→「新しい項目の追加」
画面でWindowsフォームを選択し名前を設定して[追加]ボタンでソリューション
エクスプローラに追加したVBが表示され、該当フォームのデザインが表示されます。

さかもとさんがご指摘の「継承されたフォーム」とは、リスト表示される「追加」の
後にサブメニューとして「既存の項目」とありますが、このことでしょうか。
これを選択すると「既存項目の追加」画面が表示されますが、この画面はソリューションエクスプローラに別の既存ファイルを追加するダイアログボックスのようです。

もしかすると VB2005 Express Edition にはフォームの複製機能がないのかもしれま
せん。もう少し調べてみます。ありがとうございました。




さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2007-08-31 16:44
さかもとです。

今度はちゃんとExpressEditionで確認したので使えるはずですが・・・。

手順はこうです。
1:普通にフォームを作る(これを複製すると考えます)
2:ソリューションエクスプローラーでプロジェクトを右クリックします
3:「追加」を選ぶ
4:「新しい項目」を選ぶ
5:テンプレートの中にある「継承されたフォーム」を選択し、ファイル名を適当につける
6:「継承ピッカ〜」が表示されるので継承したいフォームを選択
7:「OK」を押す

いかがでしょう?
_________________
------------------------------------------
拝啓、さかもとと申します♪
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-08-31 16:48
フォームのコントロールを含めて継承すると、
一部のコントロールで継承先での編集ができなかったり、
いろいろ問題が出やすいので、個人的にはあまり好きではありません。

無難にコントロールとかをコピーしたいのであれば、
新しいフォームを普通に作成して、

元にするフォームのデザイナですべてのコントロールを選択してコピー

新しいフォームに貼り付け

でいいと思います。

継承はExpressでも普通にできます。
ただし、designerファイルを手で書き換えなくてはなりません。

参考になりそうなページ
http://www.atmarkit.co.jp/fdotnet/dotnettips/324winbaseform/winbaseform.html

引用:

だんじりさんの書き込み (2007-08-31 15:00) より:
WindowsXP VB2005EEを使って、Windowsアプリケーションを開発中の新人です。



おせっかいかも知れませんが、「新人」だと毎回アピールしないほうがよいと思います。
だんじりさんは悪意を持って使われてはいないと思うのですが、
「新人」だから何か配慮して欲しいような意図を感じてしまいます。
わからないことを質問するのは恥ずかしいことではありませんから、
「新人なんですけど・・・」みたいに縮こまらずに堂々と質問しましょう。
ただし、質問前に自分でできることはやってくださいね。
(検索エンジンでの検索とか、このフォーラムの検索とか)

#書いている間に先を越されてました。
#designerファイルを手で書き換えなくても継承できるんですか…知りませんでした。

[ メッセージ編集済み 編集者: KI 編集日時 2007-08-31 16:52 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-08-31 17:15
今回のご質問は継承を使うのが答えになるのでしょうか。 単に今使っている Form をベースに流用したいがための質問に見えます。 流用目的ならもしそうであれば、から KI さんが最初に書かれた方法を取るようにしてください。 継承はコピーではありません。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
だんじり
大ベテラン
会議室デビュー日: 2007/08/10
投稿数: 155
お住まい・勤務地: 神奈川県
投稿日時: 2007-08-31 21:59
さかもとさん、お返事ありがとうございます。
今日で暑かった夏も終わりですね。先ほどまで友人と夏を惜しんで一杯やってました。

ところで、解答いただくのにいちいち確認されておられるのでしょうか。大変ご苦労を
おかけしています。ところで確認いただいたのに私しのExpressEditionでは、手順通り
に操作できません。バージョンの違いでしょうか。次のようになっています。
1:普通にフォームを作る
2:ソリューションエクスプローラーでプロジェクトを右クリックします
3:「追加」を選ぶ
4:「新しい項目」を選ぶ
5:テンプレートの中にある「継承されたフォーム」を選択しする。
この段階で「新しい項目の追加」画面には次の項目しか表示されていません。
・Windowsフォーム
・ダイアログ
・エクスプローラフォーム
・MDE親フォーム
・情報ボックス
・ログインフォーム
・スプラッシュスクリーン
・クラス
・モジュール
・データセット
・SQLデータベース
・ユーザーコントロール
・テキストファイル
私のExpressEditionは今年4月ごろですから、もしやと思い現在のExpressEditionを
ダウンロードしてみましたが、同じように「継承されたフォーム」は表示されていま
せん。さかもとさま、おそらくバージョンの違いと思います。それでもフォームを
複製することをExpressEditionにも考慮されていたことがわかり、納得しいています。
私は、さかもとさんのようにExpressEditionで確認までしていただかなくても、先輩
の考え方がわかれば、自分の考えが間違っていないことを納得できて、ありがたく
思っています。さかもとさん、ありがとうございました。

KIさん、
フォームのコピーよりも、普通のフォームを新規作成して、元にするフォームのデザ
イナですべてのコントロールを選択してコピー し、新しいフォームに貼り付ければ
とのことですが、最も複雑と思われる DataGridView コントロール等はコピーできま
せん。どうしても同じようなフォームを作成したいことはよく発生すると思いますが

また「新人」についてのご忠告ありがとうございます。ただ新米の私が「@IT会議
室」の質問を拝見しても、質問の意味すらわからないのがほとんどで、レベルの違い
が大きいものと感じています。そんなことから、一部我々のような初心者に対しても
質問の内容があまりに素人的なものですが、解答いただく諸先輩に対し、レベルを落
して説明いただいており、大変助かっています。
またKIさんがおっしゃるとおり、質問の前に自分でよく調べることは重要でだと
感じています。それだけにご解答いただいて納得できた場合はどれほどうれしい
ことか、表現のしようのないほどです。私も早く教える側に回って、多くの人に
喜んでもらしたいと思っていまっすが、もうしばらくはよろしくお願いいたします。

じゃんぬねっとさん。
いつも大変お世話になり、ありがとうございます。
継承とは、次のようなコードでしょうか。
Dim frmXXX As New コピー元Frm
frmXXX.Show
たんなるコピーを作成するのではなく、じゃんぬねっとさんのおっしゃるとおり、
フォームのコピーを作成したく考えております。
早速のご指導ありがとうございました。



[ メッセージ編集済み 編集者: だんじり 編集日時 2007-09-01 09:01 ]

[ メッセージ編集済み 編集者: だんじり 編集日時 2007-09-01 09:14 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-08-31 22:16
引用:

だんじりさんの書き込み (2007-08-31 21:59) より:

継承とは、次のようなコードでしょうか。
Dim frmXXX As New コピー元Frm
frmXXX.Show
たんばるコピーを作成するのではなく、じゃんぬねっとさんのおっしゃるとおり、
フォームのコピーを作成したく考えております。
早速のご指導ありがとうございました。


いいえ違います。 それはただのインスタンスの生成ですね。 今回の話とはまったく関係ないと思います。 というより、このスレッドでコードの話は出ていないような...

# たんばる? コピー?

そもそも "継承はコピーではない" と私は断言しているのですが、それでもなお "単なる (たんばる) コピー" という発言がありますね。 "単なる" の意図するところは、どちらか一方が "単なるではない" となります。 つまり双方ともを "コピー" という分類に詰め込もうとしているように見受けられるわけです。

先にも書いたように今回の質問は、既存の Form のコピーを元に流用したいだけと捉えています。 よって継承は不適当であり、これらは絶対に混同してほしくありませんでした。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)