- - PR -
継承フォームのサイズ変更について
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-05-29 09:06
さかもとと申します。
環境:VB2005(WINアプリ) WindowsXP SP2 いつもお世話になります。 継承フォームについて質問をさせて頂きたいと思います。 1:プロジェクトXに継承元となるフォームAを作成し、グループボックスとボタンをいくつか配置しています。 2:プロジェクトYよりプロジェクト参照によりフォームAを継承したフォームBを作成します。 3:この状態でフォームAのサイズを変更しリビルドするとフォームBのサイズも変更されます。 3までは問題ないのですが、3の状態からフォームBに対し、例えばボタンコントロールを一つ追加して、再度フォームAのサイズを変更してもフォームBのサイズは変更されません。 フォームB.Designer.vbの中身を見てみると
が追記されており、サイズが固定(継承元のフォームAとは異なる)されています。 BackColorなどはコントロール追加後にフォームAを変更すればフォームBにも反映されますが、このようなケースでサイズを正しく継承するにはどのようにしたら宜しいのでしょうか? 宜しくお願い致します。 [ メッセージ編集済み 編集者: さかもと 編集日時 2006-05-29 09:13 ] | ||||||||
|
投稿日時: 2006-05-29 09:15
これは俗にいう「触っちゃいけない」コード(デザイナが自動生成するコード)に、サイズ指定のコードが含まれてしまうからだと思います。
InitializeCompornent の下に、ベースクラスからサイズを貰うように書くのが良いです。 [ メッセージ編集済み 編集者: R・田中一郎 編集日時 2006-05-29 09:16 ] | ||||||||
|
投稿日時: 2006-05-29 09:33
R・田中一郎様
ご返答ありがとうございます。 >InitializeCompornent の下に というのは、この場合フォームB側に、ということで宜しいでしょうか? フォームBとして試してみましたが、フォームB上のコントロールを少しでも変更すると、InitializeCompornent以下の触ってはいけないコードが自動再生成されてしまいます。フォームA側のLoadイベントで無理やりサイズを指定してみてもやはりフォームBのコードが優先されてしまうようで、サイズの変更が出来ません。 物凄く基本的な部分で間違えているような気がするのですが、何かお気づきの点はありませんでしょうか? [ メッセージ編集済み 編集者: さかもと 編集日時 2006-05-29 09:51 ] | ||||||||
|
投稿日時: 2006-05-29 09:49
MyBase.Size を Me.Size に引き渡すという意味なんでしょうけど、 その前に、デザインまで継承するのは、あまり良いことではありません。 # もしやるのであれば、InitializeComponent メソッド外に設定しておかないと... _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-05-29 09:57
んー、既にベースのサイズも派生のInitializeCompornent()によって、変わってしまっているんじゃないかな。 「値」を継承する事を前提とするのは微妙ですね。全部同じサイズにしたいなら、設定ファイルから読み込むとかにしたほうがよさそうですね。 _________________ 囚人のジレンマな日々 | ||||||||
|
投稿日時: 2006-05-29 10:08
さかもとです。
じゃんぬねっと様、ご返答ありがとう御座います。 >その前に、デザインまで継承するのは、あまり良いことではありません。 これはどのような面から良くないのでしょうか?お伺いできればと思います。 囚人様、 >既にベースのサイズも派生の 変わっていました・・・。 じゃんぬねっと様がおっしゃるのもこのような部分からなのでしょうか? >「値」を継承する事を前提とするのは微妙ですね サイズも継承すればいいや、と簡単に考えていましたが、根本的に間違えていたようですね・・・。 開発開始当初にデザインの詳細な仕様(サイズとBorderStyle等)が決まっていなくて、やれ一斉に替えようと思っていたのですが、見通しが甘かったです。 | ||||||||
|
投稿日時: 2006-05-29 10:27
そんな動きをするのですね!(^▽^;)しらなかったです・・・ ベースクラスのサイズプロパティを Override(new?)して、ReadOnly にする手もありますかね。 でも、サイズを固定化しただけなのでしたら、InitializeCompornent() 後に明示的に定数からサイズを設定するようにして、定数部分のみ後から修正するなどの方が、後から見ても分かりやすいかもしれません。(囚人さんの設定ファイルの案とかぶりますが) | ||||||||
|
投稿日時: 2006-05-29 10:58
さかもとです。
R・田中一郎様 >定数部分のみ後から修正するなどの方が、後から見ても分かりやすいかもしれません そうですね、分かりやすさの点からしたらそのようにすべきかも知れませんね。 やはり根本的に間違えて・・・。 まだ画面数が少なかったのが不幸中の幸いです。 ありがとうございました。 |
1|2|3
次のページへ»