派生フォームが基本フォームからサイズを自動的に継承しないのは興味深いことです。これは、何もしなくても機能するはずだからです。
問題の疑わしい原因:
問題は、VisualStudioのフォームデザイナを使用してフォームを編集していることが原因であると思われます。フォームを編集するたびに、WindowsフォームデザイナはフォームのInitializeComponent
メソッドで必要なコードを生成します。生成されたすべてのコードの中には、基本フォームのサイズと同じであっても、フォームのサイズを設定する割り当てがあります。したがって、派生フォームの作成後に基本フォームのサイズを変更した場合でも、派生フォームを基本フォームと同じサイズにする場合は、これらの割り当てを手動でコメントアウトする必要があります。(ただし、それがコントロールの配置とレイアウトにさらに問題を引き起こす可能性があるかどうかはわかりません。)
// Code to be commented out in your derived form's InitializeComponent method:
this.AutoScaleDimensions = new System.Drawing.SizeF(...);
this.ClientSize = new System.Drawing.Size(...);
これらの行がコメント化されると、ベースフォームで設定されたサイズInitializeComponent
が派生フォームに使用されます。
回避策:
フォームを編集するたびにデザイナーが生成したコードを手動でコメントアウトする必要がないように、次の操作を実行できます。
基本フォームから派生したフォームを作成します。それを呼びましょうFrozenBaseForm
。他のすべてのフォームは、基本フォームから直接ではなく、このクラスから派生します。ここで、この「中間」クラスで、新しいプロパティを定義しますClientSize
。
public class FrozenBaseForm : BaseForm
{
new public SizeF ClientSize
{
get { return base.ClientSize; }
set { }
}
}
これにより、すべての割り当てClientSize
はまったく効果がなくなり、基本フォームのサイズが保持されます。これは実を言うとハックのように感じますが、うまくいくようです。Size
ところで、同じ方法でプロパティを非表示にする必要があるかもしれません。
前述のように、フォームを直接からではFrozenBaseForm
なく、から派生させます。BaseForm
public class DerivedForm1 : FrozenBaseForm { ... }
public class DerivedForm2 : FrozenBaseForm { ... }
...
別のオプション(他のすべてが失敗した場合の最後の手段):
最後の手段として、Forms Designerのことを忘れて、派生フォームをコードエディターで手動で定義するだけで済みます(個人的にはこれを行いたくありませんが)。
public class DerivedForm : BaseForm
{
public DerivedForm()
{
// make all necessary changes to the base form:
...
}
}