创建自定义Panel类C#

时间:2011-04-16 14:08:26

标签: c# winforms class

嘿伙计们,我正在尝试从Panel

设置一个名为FormPanel的自定义Panel
class FormPanel : Panel
    {
        bool previous;
        FormPanel l;

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

        }
    }

这就是我现在所处的位置。我希望FormPanel有一个bool var,并希望设置它的父和Dock的默认属性。这是如何运作的?我该如何设置?

3 个答案:

答案 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属性默认为在属性窗口中填充。