簡體   English   中英

創建自定義面板類C#

[英]Creating a custom Panel class C#

大家好,我正在嘗試從面板設置一個自定義面板,稱為FormPanel

class FormPanel : Panel
    {
        bool previous;
        FormPanel l;

        public FormPanel()
        {
            previous = false;
            l.Parent = this;
            l.Dock = DockStyle.Fill;

        }
    }

這幾乎就是我現在所在的位置。 我希望FormPanel具有布爾變量,並希望將其設置為Parent和Dock的默認屬性。 這是如何運作的? 我該如何設置?

您不應使用您類型的內部變量,而應直接設置屬性(從基類繼承):

class FormPanel : Panel
{
    bool previous;

    public FormPanel()
    {
        previous = false;
        base.Parent = this;
        base.Dock = DockStyle.Fill;

    }
}

雖然我認為“ base.Parent = this”不會起作用...

您需要添加有關您要實現的目標的更多信息。

就目前而言,您的FormPanel具有一個私有字段(l),它本身就是一個FormPanel:

  FormPanel l;

您永遠不會實例化此字段,因此它將始終為null,並且構造函數中的屬性分配將失敗,並顯示NullReferenceException

l.Parent = this;              
l.Dock = DockStyle.Fill;

如果您實例化了此私有字段,則將具有遞歸,因為您的FormPanel包含私有FormPanel,而它本身又包含私有FormPanel,...

l = new FormPanel();
l.Parent = this;              
l.Dock = DockStyle.Fill;

您說要設置默認的Parent,但是我看不到FormPanel如何知道其父在構造函數中,除非您將Parent作為參數傳遞給構造函數,例如,也許您正在尋找類似的東西:

public FormPanel() : this(null)
{
}

public FormPanel(Control parent)
{
    if (parent != null)
    {
        this.Parent = parent;
    }
    this.Dock = DockStyle.Fill;
    ...
}

如果您希望面板將DockStyle.Fill作為Dock屬性的默認值,請執行以下操作:

public class FormPanel : Panel
{
    public FormPanel()
    {
        this.Dock = DockStyle.Fill;
    }

    [System.ComponentModel.DefaultValue(typeof(DockStyle), "Fill")]
    public override DockStyle Dock
    {
        get { return base.Dock; }
        set { base.Dock = value; }
    }
}

這使Dock屬性在屬性窗口內默認為Fill。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM