1

withDock = DockStyle.Fillコントロールが、パディングが設定された別のコントロールの子である場合、ドッキングされたコントロールは、コンテナーコントロールのパディングを完全に無視します。コンテナコントロールがUserControlタイプのサブクラスである場合、これは発生しません。

たとえば、次の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に準拠しません。ContainerPadding

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

注:私は.NET4.5でVS11を実行しています。これは問題になる可能性がありますが、別のバージョンまたはプラットフォームでテストして確実に調べることはできません。

ありがとう、ブランドン

4

1 に答える 1

2

コンテナー コントロールは、ContainerControl クラスから派生する必要があります。これにより、多くの「コンテナのように振る舞う」動作が可能になります。Padding プロパティの観察を含みます。

于 2012-05-05T09:04:40.513 に答える