やりたいこと
TableLayoutPanel
を持つフォームクラス(スーパクラス)を継承した、フォームクラス(サブクラス)のデザイナーでTableLayoutPanel
を編集したい。
コードは以下のような感じで、SubFormのデザイナー画面でTableLayoutPanel
を編集することを想定しています。
public abstract partial class BaseForm
{
private void InitializeComponent()
{
this.tableLyaoutPanel = new System.Windows.Forms.TableLayoutPanel();
this.tableLyaoutPanel = ColumnCount = 2;
// 以下省略
}
private System.Windows.Forms.TableLayoutPanel tableLyaoutPanel;
}
public abstract partial class BaseForm : Form
{
public BaseForm()
{
InitializeComponent();
}
}
public partial class SubForm : BaseForm
{
public SubForm()
{
InitializeComponent();
}
}
結論
まずは結論から。
サブクラスで編集することは出来ません
なぜ出来ないのか?
Microsoftによると、「TableLayoutPanelControl
は視覚的継承をデザイナーフォームでサポートしていません。派生クラスではロックされた状態で表示されます。」とのことです。
Avoid Visual Inheritance
The TableLayoutPanel control does not support visual inheritance in the Windows Forms Designer in Visual Studio. A TableLayoutPanel control in a derived class appears as "locked" at design time.
対応策
TableLayoutPanel
を使うことはできないので、Panel
で代用します。
デフォルトの修飾子はprivate
になっているので、protected
またはpublic
にするのを忘れないでください。