[英]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.