注意:FlowLayoutPanel、TableLayoutPanelコントロールは.NET Framework 2.0以降でのみ使用できます。
FlowLayoutPanelコントロールを配置したコントロール(フォームを含む)を継承して新たなコントロールを作成した時、FlowLayoutPanelのModifiersがPublicであったとしても、継承したコントロールでFlowLayoutPanelのプロパティを変更できなくなるという問題があります。これはFlowLayoutPanelだけでなく、TableLayoutPanelやToolStrip、MenuStrip、ContextMenuStrip、StatusStrip、DataGridView、BindingNavigatorコントロールでも起こります。このバグについて詳しくは「Bug Details: Form designer doesn’t allow to modify properties of all new for .Net Framework 2.0 controls」で説明されています。
FlowLayoutPanelについての解決法が「FDBK37485#1: Can manage to use FlowLayoutPanel with some work.」(リンク切れ)で紹介されています。
これによると、FlowLayoutPanelを継承したクラスを作成し、これにdesignerTypeにPanelDesignerを指定したDesigner属性をつけ、これをFlowLayoutPanelの代わりに継承基のコントロールで使用するということです。
具体的には、例えばまず次のようなクラスを作成し、これをFlowLayoutPanelの代わりに使うようにします。
<System.ComponentModel.Designer( _ "System.Windows.Forms.Design.PanelDesigner, System.Design")> _ Public Class InheritableFlowLayoutPanel Inherits FlowLayoutPanel Public Sub New() End Sub End Class
[Designer("System.Windows.Forms.Design.PanelDesigner, System.Design")] public class InheritableFlowLayoutPanel : FlowLayoutPanel { public InheritableFlowLayoutPanel() { } }
注意:新しく作成したクラスを、基のコントロールクラスの代わりに使用するという意味が分からないという方は、こちらをご覧ください。
残念ながらこれはFlowLayoutPanelだけの解決法で、他のコントロールには使えません。
(この記事は、「.NETプログラミング研究」で紹介したものを基にしています。)
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。