私が取り組んでいる一連のコントロールの一部には、明らかに、それらのいくつかをまとめてコンポジットにすることが含まれます。これには考慮が必要であることを急速に学び始めています(これは私にとってまったく新しいことです!):)
私は基本的にStyledWindow
コントロールを持っています。これは本質的に、Panel
他のビットを実行する能力を備えたものです(境界線の追加など)。
その中で子コントロールをインスタンス化するコードを次に示します。この時点まで、平凡な静的コントロールで正しく動作しているように見えます:
protected override void CreateChildControls()
{
_panel = new Panel();
if (_editable != null)
_editable.InstantiateIn(_panel);
_regions = new List<IAttributeAccessor>();
_regions.Add(_panel);
}
今日、より複雑なコントロールを入れ子にしようとしたときに問題が発生しました。このコントロールは、ページへの参照を使用します。これは、JavaScript を挿入して、もう少し機敏で反応が良いようにするためです (RegisterClientScriptBlock
これが、ページ参照が必要な唯一の理由です)。
現在、これは「オブジェクト null」エラーを引き起こしていましたが、これを render メソッドにローカライズしました。もちろん、[null]Page
オブジェクトに対してメソッドを呼び出そうとしていました。
私を混乱させているのは、コントロールがスタンドアロンとして正常に機能することですが、それを配置するStyledWindow
とすべてがひどくうまくいかないことです!
StyledWindow
そのため、またはのいずれかに何かが欠けているようですChildControl
。何か案は?
アップデート
Brad Wilsonが正しく指摘したように、コントロールがコレクションに追加されていませんControls
。これが_panel
目的であり、これは私のためにそれを処理するためにあり、基本的にオーバーライドしますControls
(これはどこかのガイドから取得しました):
Panel _panel; // Sub-Control to store the "Content".
public override ControlCollection Controls
{
get
{
EnsureChildControls();
return _panel.Controls;
}
}
それが物事を明確にするのに役立つことを願っています。申し訳ありません。
Longhorn213 の回答に続く更新
そうですね、コントロールをいじって、1 つをコンポジット内に、もう 1 つを外側に配置しました。次に、コントロール ライフサイクルのイベント メジャー イベントで Page のステータスを取得し、ページにレンダリングしました。
スタンドアロンは正常に動作しており、ページは期待どおりに初期化されています。ただし、コンポジットにネストされているものは異なります。OnLoad
イベントはまったく発生していません!したがって、コントロール階層を正しく設定していないという点でブラッドはおそらく正しいと思います。不足しているものについて誰かアドバイスをいただけますか? Panel メソッドだけでは十分ではありませんか? (まあ、明らかにそうじゃない?!) :D
助けてくれてありがとう、ありがとう:)