我正在处理的一系列控件的一部分显然涉及我将其中的一些组合在一起。我很快开始了解到这需要考虑(这对我来说是全新的!):)
我基本上有一个StyledWindow
控件,它本质上是一个Panel
具有执行其他位(如添加边框等)的能力的荣耀。
这是在其中实例化子控件的代码。到目前为止,它似乎一直在使用普通的静态控件正常工作:
protected override void CreateChildControls()
{
_panel = new Panel();
if (_editable != null)
_editable.InstantiateIn(_panel);
_regions = new List<IAttributeAccessor>();
_regions.Add(_panel);
}
今天当我尝试在其中嵌套一个更复杂的控件时,问题就来了。该控件使用对页面的引用,因为它注入了 JavaScript 以使其更加灵活和响应迅速(这RegisterClientScriptBlock
是我需要页面引用的唯一原因)。
现在,这导致了“object null”错误,但我将其本地化为 render 方法,它当然试图针对 [null]Page
对象调用该方法。
令我困惑的是,该控件作为独立的控件可以正常工作,但是当放置在其中时StyledWindow
,一切都变得非常错误!
所以,看起来我在 myStyledWindow
或ChildControl
. 有任何想法吗?
更新
正如Brad Wilson非常正确地指出的那样,您看不到控件被添加到Controls
集合中。这就是_panel
它的用途,它是为我处理的,基本上然后覆盖Controls
(我从某处的指南中得到这个):
Panel _panel; // Sub-Control to store the "Content".
public override ControlCollection Controls
{
get
{
EnsureChildControls();
return _panel.Controls;
}
}
我希望这有助于澄清事情。道歉。
按照Longhorn213 的回答更新
是的,我一直在玩控件,将一个放在复合材料中,一个放在外面。然后我在控件生命周期中的 event major event 中获取 Page 的状态并将其呈现到页面。
独立运行正常,页面按预期启动。但是,嵌套在 Composite 中的那个是不同的。它的OnLoad
事件根本没有被解雇!所以我猜布拉德可能是对的,因为我没有正确设置控制层次结构,任何人都可以就我所缺少的内容提供一些建议吗?Panel方法还不够吗?(好吧,显然不是吗?!):D
谢谢你们的帮助,不胜感激:)