Control.AddParsedSubObject メソッド
サーバー コントロールに、XML または HTML の要素が解析されたことを通知し、その要素をサーバー コントロールの ControlCollection オブジェクトに追加します。
Protected Overridable Sub AddParsedSubObject( _
ByVal obj As Object _)
[C#]
protected virtual void AddParsedSubObject(objectobj);
[C++]
protected: virtual void AddParsedSubObject(Object* obj);
[JScript]
protected function AddParsedSubObject(
obj : Object);
パラメータ
- obj
解析された要素を表す Object 。
解説
オーバーライドしない限り、このメソッドはサーバー コントロールの ControlCollection オブジェクトに LiteralControl オブジェクトを自動的に追加します。このコレクションは、 Control.Controls プロパティによってアクセスできます。
使用例
[Visual Basic, C#, C++] カスタム サーバー コントロールの例を次に示します。このコントロールは、 AddParsedSubObject メソッドを使用して、このコントロールの開始タグと終了タグの間で宣言されている要素が TextBox Web サーバー コントロールかどうかを確認します。Web サーバー コントロールの場合、これらの要素は ArrayList オブジェクト items
に追加されます。オーバーライドされた CreateChildControls メソッドが呼び出されると、 ArrayList が反復処理され、その中の各オブジェクトがカスタム サーバー コントロールの ControlCollection に追加されます。
' Custom ControlBuilder class. Interprets nested tag name "myitem" as a textbox.
Public Class MyControlBuilder
Inherits ControlBuilder
Public Overrides Function GetChildControlType(tagName As String, _
attributes As IDictionary) As Type
If String.Compare(tagName, "myitem", True) = 0 Then
Return GetType(TextBox)
End If
Return Nothing
End Function
End Class
<ControlBuilderAttribute(GetType(MyControlBuilder))> Public Class MyControl
Inherits Control
' Stores all the controls specified as nested tags.
Private items As New ArrayList()
' This function is internally invoked by IParserAccessor.AddParsedSubObject(Object).
Protected Overrides Sub AddParsedSubObject(obj As Object)
If TypeOf obj Is TextBox Then
items.Add(obj)
End If
End Sub
' Override 'CreateChildControls'.
Protected Overrides Sub CreateChildControls()
Dim myEnumerator As System.Collections.IEnumerator = items.GetEnumerator()
While myEnumerator.MoveNext()
Me.Controls.Add(CType(myEnumerator.Current, TextBox))
End While
End Sub
End Class
[C#]
// Custom ControlBuilder class. Interprets nested tag name "myitem" as a textbox.
public class MyControlBuilder : ControlBuilder
{
public override Type GetChildControlType(String tagName,
IDictionary attributes)
{
if (String.Compare(tagName, "myitem", true) == 0)
{
return typeof(TextBox);
}
return null;
}
}
[
ControlBuilderAttribute(typeof(MyControlBuilder))
]
public class MyControl : Control
{
// Store all the controls specified as nested tags.
private ArrayList items = new ArrayList();
// This function is internally invoked by IParserAccessor.AddParsedSubObject(Object).
protected override void AddParsedSubObject(Object obj)
{
if (obj is TextBox)
{
items.Add(obj);
}
}
// Override 'CreateChildControls'.
protected override void CreateChildControls()
{
System.Collections.IEnumerator myEnumerator = items.GetEnumerator();
while(myEnumerator.MoveNext())
this.Controls.Add((TextBox)myEnumerator.Current);
}
}
[C++]
// Custom ControlBuilder class. Interprets nested tag name "myitem" as a textbox.
public __gc class MyControlBuilder : public ControlBuilder
{
public:
Type* GetChildControlType(String* tagName, IDictionary* /*attributes*/)
{
if (String::Compare(tagName, S"myitem", true) == 0)
{
return __typeof(TextBox);
}
return 0;
}
};
[
ControlBuilderAttribute(__typeof(MyControlBuilder))
]
public __gc class MyControl : public Control
{
// Store all the controls specified as nested tags.
private:
ArrayList* items;
public:
MyControl()
{
items = new ArrayList();
}
// This function is internally invoked by IParserAccessor.AddParsedSubObject(Object).
protected:
void AddParsedSubObject(Object* obj)
{
if (dynamic_cast<TextBox*>(obj))
{
items->Add(obj);
}
}
// Override 'CreateChildControls'.
void CreateChildControls()
{
System::Collections::IEnumerator* myEnumerator = items->GetEnumerator();
while(myEnumerator->MoveNext())
this->Controls->Add(dynamic_cast<TextBox*>(myEnumerator->Current));
}
};
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 2000, Windows XP Professional, Windows Server 2003 ファミリ
参照
Control クラス | Control メンバ | System.Web.UI 名前空間 | ControlCollection