|
code
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
Control.Controls bug? Control's child controls missing at the run time...NET 1.1/VB.NET: I have a custom web control Public Class DatePicker Inherits Control Implements INamingContainer In the CreateChildControls I adding some controls to it: Protected Overrides Sub CreateChildControls() placeJavascript() MyBase.Controls.Add(New LiteralControl("<table class='Calendar'><tr><td>")) Dim txtTextBox As New System.Web.UI.WebControls.TextBox With txtTextBox If Len(m_ControlCssClass) > 0 Then .CssClass = m_ControlCssClass End If If Not (m_text = "") Then .Text = m_text End If If Not (m_Css = "") Then .CssClass = m_Css End If .ID = "foo" .Width = Unit.Pixel(80) .MaxLength = Me.DateType.Length End With MyBase.Controls.Add(txtTextBox) MyBase.Controls.Add(New LiteralControl( _ "<img border='0' class='ImgNoSpace' alt='Calendar' " & _ "src='" & imgDirectory + m_calendar & "' " & _ "onclick=""javascript:popUpCalendar(document.all." & Me.ClientID & "_foo,document.all." & _ Me.ClientID & "_foo, '" & m_DateType & "');"">")) MyBase.Controls.Add(New LiteralControl("</td></tr></table>")) End Sub Now, then I trying to do For Each ctl As Control In myControl.Controls on my page: Protected Overrides Sub OnLoad(ByVal e As System.EventArgs) ' Call base load before we do any work at this level MyBase.OnLoad(e) dpFrom.ValidatingControlClientID = btnSearch.ClientID dpThrough.ValidatingControlClientID = btnSearch.ClientID For Each ctl As Control In dpFrom.Controls If TypeOf ctl Is TextBox Then dpThrough.SecondDateControlClientID = ctl.ClientID End If Next For Each ctl As Control In dpThrough.Controls If TypeOf ctl Is TextBox Then dpFrom.SecondDateControlClientID = ctl.ClientID End If Next End Sub I am getting nothing... So, if I set the breakpoint on the For Each ctl As Control In dpFrom.Controls and QuickWatch (or just Watch) dpFrom.Controls - I will see Count = 0. Now - interesting part: If I QuickWatch (or just Watch) just dpFrom and will expand Controls property - I will see Count = 4. And after that - if I QuickWatch (or just Watch) dpFrom.Controls - I will see Count = 4. I beleive that that is a bug. So, how I can get my control's child controls on the page? Should I do something differently then I adding child controls in my web control? Help! :-) Hi,
CreateChildControls will not be called unless something in your control invokes either FindControl (normally on postbacking control this is initiated on postback) or your control passes to PreRender phase, where controls are created automatically. E.g something should signal creating them. You can get accessing the Controls collection to cause EnsureChildControls to be called if youy override Controls property Public Overrides Controls As ControlsCollection Get EnsureChildControls() Return MyBAse.Controls End Get End Property With this approach child controls will be created when you loop though the collection. -- Show quoteHide quoteTeemu Keiski ASP.NET MVP, AspInsider Finland, EU http://blogs.aspadvice.com/joteke <sinelnikov.and***@gmail.com> wrote in message news:1133992573.197913.301030@f14g2000cwb.googlegroups.com... > Hello, > > > .NET 1.1/VB.NET: > > > I have a custom web control > > > Public Class DatePicker > Inherits Control > Implements INamingContainer > > > In the CreateChildControls I adding some controls to it: > > > Protected Overrides Sub CreateChildControls() > placeJavascript() > MyBase.Controls.Add(New LiteralControl("<table > class='Calendar'><tr><td>")) > Dim txtTextBox As New System.Web.UI.WebControls.TextBox > > > With txtTextBox > If Len(m_ControlCssClass) > 0 Then > .CssClass = m_ControlCssClass > End If > If Not (m_text = "") Then > .Text = m_text > End If > If Not (m_Css = "") Then > .CssClass = m_Css > End If > .ID = "foo" > .Width = Unit.Pixel(80) > .MaxLength = Me.DateType.Length > End With > > > MyBase.Controls.Add(txtTextBox) > MyBase.Controls.Add(New LiteralControl( _ > "<img border='0' class='ImgNoSpace' alt='Calendar' " & _ > "src='" & imgDirectory + m_calendar & "' " & _ > "onclick=""javascript:popUpCalendar(document.all." & > Me.ClientID & "_foo,document.all." & _ > Me.ClientID & "_foo, '" & m_DateType & "');"">")) > MyBase.Controls.Add(New LiteralControl("</td></tr></table>")) > End Sub > > > Now, then I trying to do For Each ctl As Control In myControl.Controls > on my page: > > > Protected Overrides Sub OnLoad(ByVal e As System.EventArgs) > ' Call base load before we do any work at this level > MyBase.OnLoad(e) > > > dpFrom.ValidatingControlClientID = btnSearch.ClientID > dpThrough.ValidatingControlClientID = btnSearch.ClientID > > > For Each ctl As Control In dpFrom.Controls > If TypeOf ctl Is TextBox Then > dpThrough.SecondDateControlClientID = ctl.ClientID > End If > Next > > > For Each ctl As Control In dpThrough.Controls > If TypeOf ctl Is TextBox Then > dpFrom.SecondDateControlClientID = ctl.ClientID > End If > Next > > > End Sub > > > I am getting nothing... > > > So, if I set the breakpoint on the For Each ctl As Control In > dpFrom.Controls and QuickWatch (or just Watch) dpFrom.Controls - I will > > see Count = 0. > > > Now - interesting part: If I QuickWatch (or just Watch) just dpFrom and > > will expand Controls property - I will see Count = 4. > > > And after that - if I QuickWatch (or just Watch) dpFrom.Controls - I > will see Count = 4. > > > I beleive that that is a bug. > > > So, how I can get my control's child controls on the page? Should I do > something differently then I adding child controls in my web control? > > > Help! :-) >
2.0 menu control and color
Dropdownlist: SelectedValue which is invalid Understanding query strings VS2005 Designer does NOT display asp:panels!! Why? contenteditable Coding issue View State problem when multiple user work on the same page onload called only once Custom Buttons Events not fired for Dynamically Created Controls in VS2005 ASP.NET 2.0 |
|||||||||||||||||||||||