B
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;
}
}
}
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;
}
}
}