嘿伙计们,我正在尝试从Panel
设置一个名为FormPanel的自定义Panelclass FormPanel : Panel
{
bool previous;
FormPanel l;
public FormPanel()
{
previous = false;
l.Parent = this;
l.Dock = DockStyle.Fill;
}
}
这就是我现在所处的位置。我希望FormPanel有一个bool var,并希望设置它的父和Dock的默认属性。这是如何运作的?我该如何设置?
答案 0 :(得分:1)
您不应该使用您的类型的内部变量,而是直接设置属性(您从baseclass继承的属性):
class FormPanel : Panel
{
bool previous;
public FormPanel()
{
previous = false;
base.Parent = this;
base.Dock = DockStyle.Fill;
}
}
虽然我不认为“base.Parent = this”会起作用......
答案 1 :(得分:1)
您需要添加有关您要实现的目标的更多信息。
目前,您的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如何知道它在构造函数中的父元素,除非你将父元素作为参数传递给构造函数,例如也许你正在寻找类似的东西:
public FormPanel() : this(null)
{
}
public FormPanel(Control parent)
{
if (parent != null)
{
this.Parent = parent;
}
this.Dock = DockStyle.Fill;
...
}
答案 2 :(得分:1)
如果您希望面板将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属性默认为在属性窗口中填充。