2012-05-05 1 views
1

Dock = DockStyle.Fillのコントロールが、パディングセットを持つ別のコントロールの子である場合、ドッキングコントロールはコンテナコントロールのパディングを完全に無視します。コンテナコントロールがUserControl型のサブクラスである場合、これは発生しません。Control.Paddingがドッキングされたコントロールのレイアウトに影響しないのはなぜですか?

たとえば、次の2つのクラスを考えます。

[Designer("System.Windows.Forms.Design.ParentControlDesigner, System.Design", typeof(IDesigner))] 
public class Container : Control 
{ 
    public Container() 
    { 
     Dock = DockStyle.Fill; 
     Padding = new Padding(30, 30, 30, 30); 
     BackColor = Color.Blue; 
     Controls.Add(new Contained()); 
    } 
} 

public class Contained : Control 
{ 
    public Contained() 
    { 
     Dock = DockStyle.Fill; 
     BackColor = Color.White; 
    } 
} 

DesignerAttributeは、単にデザイナーの助けとして使用するためのものです。 ContainerコントロールをUserControlから継承するように変更しない限り、ContainedコントロールはContainerコントロールのPaddingプロパティに準拠しません。

これはなぜですか?カスタムコントロールで別のコントロールをカスタムパディングにドッキングするには、UserControlを使用する必要がありますか?

注:VS11を.NET 4.5で実行しています。これは問題の可能性がありますが、別のバージョンやプラットフォームでそれをテストして確かめることはできません。

おかげで、 ブランドン

+0

あなたの実際の質問は「なぜですか?」、またはより良い回避策ですか? http://social.msdn.microsoft.com/Forums/en/winforms/thread/86ac4b22-a43a-4ef6-86ed-482596abf230を参照してください。 –

答えて

2

コンテナコントロールは、コンテナ制御クラスから派生する必要があります。それはそれに多くの "容器のような行動"の行動を与えます。 Paddingプロパティの監視を含む。

関連する問題