Home All Groups Group Topic Archive Search About

Can't set value to the property "Width" of my custom webcontrol

Author
29 Nov 2007 1:14 PM
Brook
In webform.aspx:  <cc:ctlB ID="ctl1" runat="server" Width="200px" />

If set value to width property, I will get a error that say ctlB.Page is null. This control will be fine with no width property, why?

Could anybody help me ? thanks



ctlA.cs
----------------------------
[
AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal),
AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal),
DefaultProperty("Text"),
ValidationProperty("Text"),
ToolboxData("<{0}:ctlA runat=\"server\"> </{0}:ctlA>")
]
public class ctlA : WebControl, INamingContainer
{
    protected TextBox _textBox;
    protected HiddenField _hiddenBox;

    [Bindable(false), DefaultValue(""), TypeConverter(typeof(UnitConverter))]
    public override Unit Width
    {
        get
        {
            EnsureChildControls();
            return this._textBox.Width;
        }
        set
        {
            EnsureChildControls();
            this._textBox.Width = value;
        }
    }

    public override bool EnableViewState
    {
        get
        {
            EnsureChildControls();
            return this._textBox.EnableViewState;
        }
        set
        {
            EnsureChildControls();
            this._textBox.EnableViewState = value;
            this._hiddenBox.EnableViewState = value;
            this.EnableViewState = value;
        }
    }

    protected override void CreateChildControls()
    {
        this._textBox = new TextBox();
        this._textBox.ID = "Name";
        this._textBox.ReadOnly = this.ReadOnly;
        this._hiddenBox = new HiddenField();
        this._hiddenBox.ID = "Value";

        this.Controls.Add(this._textBox);
        this.Controls.Add(this._hiddenBox);
    }

    protected override void Render(HtmlTextWriter writer)
    {
        EnsureChildControls();
        base.Render(writer);
    }

    public override ControlCollection Controls
    {
        get
        {
            EnsureChildControls();
            return base.Controls;
        }
    }

    public ctlA()
        : base(HtmlTextWriterTag.Span)
    {
    }
}


--------------------------------------------------------------------------------

ctlB.cs
------------------------------

[ToolboxData("<{0}:ctlB runat=\"server\"> </{0}:ctlB>")]
public class ctlB : ctlA
{
    internal Image _schImage;

    public ctlB()
        : base()
    {
    }

    protected override void CreateChildControls()
    {
        base.CreateChildControls();

        this._schImage = new Image();
        this._schImage.ID = "imgButton";
        this._schImage.Attributes["align"] = "absmiddle";

        this._schImage.Attributes["onclick"] = String.Format("__OpenDialog('{0}', null, {1}, {2}, '{3}', '{4}', {5});",
        Page.ResolveUrl(this.DialogPagePath), this.DialogWidth.ToString(), this.DialogHeight.ToString(), this._textBox.ClientID, this._hiddenBox.ClientID, (this.DialogMode == DialogMode.Model) ? "true" : "false");

        this.Controls.Add(_schImage);
    }

    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);
        this.Page.ClientScript.RegisterClientScriptResource(this.GetType(), "OpenDialog.js");
    }

    public override ControlCollection Controls
    {
        get
        {
            EnsureChildControls();
            return base.Controls;
        }
    }
}

AddThis Social Bookmark Button