- PR -

継承元のコントロール名を変更したら継承先のFormでエラー

1
投稿者投稿内容
siop
ベテラン
会議室デビュー日: 2003/08/12
投稿数: 67
投稿日時: 2004-10-27 16:59
共通のボタン等を貼り付けたFormを作成し、Formを作成する際の継承元としています。
Formを作成した後、親Formのボタン名称を変更しました。

すると、子Formでエラーが発生してしまいました。
[Windows フォーム デザイナで生成されたコード]内でのエラーです。
エラーの原因は、親Formの名称変更が反映されていないためなのはわかってるのですが、[コード エディタを使って変更しないでください。]とあるので変更できません。

ソリューションのリビルドを行ってもダメでした。
(リビルドではフォームデザイナで生成されたコードまでは修正しないか。)

こんな場合どうしたら良いのでしょうか?

・コードエディタで変更する。
・自動生成する何らかの方法がある。
・Formの作り直し。<=これは嫌だけど・・・。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-10-27 20:22
>[Windows フォーム デザイナで生成されたコード]内でのエラーです。
>エラーの原因は、親Formの名称変更が反映されていないためなのはわかってるのですが、

この投稿を書いた本人以外には分かりません。
「[Windows フォーム デザイナで生成されたコード]内でのエラー」というのはどんなエラーですか?
どんなメッセージが出ていますか?
siop
ベテラン
会議室デビュー日: 2003/08/12
投稿数: 67
投稿日時: 2004-10-28 09:05
引用:

この投稿を書いた本人以外には分かりません。
「[Windows フォーム デザイナで生成されたコード]内でのエラー」というのはどんなエラーですか?
どんなメッセージが出ていますか?



それで返信がなかったのですか。失礼しました。

継承元のForm上のボタンの名称をtxtExecuteからbtnExecuteに変更しました。
すると、継承しているFormで「txtExecuteはFormのメンバではありません。」となります。

エラー発生箇所は以下の4箇所です。
===========================================================================
CType(Me.txtExecute, System.ComponentModel.ISupportInitialize).BeginInit()
Me.txtExecute.Name = "btnFileOut"
Me.Controls.SetChildIndex(Me.txtExecute, 0)
CType(Me.txtExecute, System.ComponentModel.ISupportInitialize).EndInit()
===========================================================================

時間がなかったので、コードエディタで直してしまいましたが、本来はどうすべきか知りたいと思います。
kanai
ベテラン
会議室デビュー日: 2004/09/13
投稿数: 98
投稿日時: 2004-10-28 18:19
「コードエディタを使って変更しないでください。」は、素人が自動生成されたコードを不用意に変更すると正常に動作しない恐れがあるための注意書き、程度に考えてよいと思います。

今回のようなケースは、コードエディタを使って変更するしかないと思います。

また「継承元のtxtExecuteの名前をbtnExecuteに変更」といっても、継承先ではそれらが同じモノであるかはわかりませんので、継承先で継承元での変更が反映されることはありません。逆に、自動的に反映されると困る場合もあるでしょう。

従って、継承を使うと決めたならば、継承先を作成後はできる限り継承元の公開メンバを変更/削除しないようにすべきです。(変更した場合は、継承先で今回のような修正が必要になるということ)
siop
ベテラン
会議室デビュー日: 2003/08/12
投稿数: 67
投稿日時: 2004-10-28 18:26
引用:

従って、継承を使うと決めたならば、継承先を作成後はできる限り継承元の公開メンバを変更/削除しないようにすべきです。



継承元のメンバ変更/削除あるいはメソッド変更/削除は問題ありそうですね。
でも、最初の時期は継承元の仕様も固まってないので、まだありそうです。
できるだけ早いうちに(子画面が少ないうちに)固めるべきですね。

メンバの追加、メソッドの追加は問題ないですね。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-10-28 21:01
引用:

siopさんの書き込み(2004-10-28 09:05)より:

時間がなかったので、コードエディタで直してしまいましたが、本来はどうすべきか知りたいと思います。


 本来も何も、VS.NET2003では、コードエディタで直すしかありません。Together Edition for Microsoft Visual Studio .NET 2.0がインストールしてあれば、「リファクタリング」メニューから「名前の変更」で、一括変更できます。VS2005では、「リファクタ」メニューから「名前の変更」でできます。
_________________
1

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