Imports System.Collections
 Imports Infragistics.Win
		
 Protected Overrides Sub PositionChildElements()
     ' RectInsideBorders は各取得操作で計算されるため、 
     ' RectInsideBorders を複数回呼び出す代わりに、 
     ' 返された矩形をキャッシュすることを推薦します
     Dim workRect As Rectangle = Me.RectInsideBorders
     ' ChildElements コレクションへの参照を保存します
     ' ExtractExistingElement への呼び出しでそのコレクションを使用します
     Dim ChildElements As ArrayList = Me.ChildElements
     ' ChildElements コレクションを null 値に設定します
     Me.childElementsCollection = Nothing
     ' 子要素を作成する方法は 2 つあります
     ' どちらの方法も簡単ですが、 
     ' 使用する方法は
     ' どちらが適切であるかによって決定してください。 
     ' 両方の方法を使用する場合、
     ' 同じタイプで使用できないことに注意して
     ' ください
     ' 最初の方法は TextUIElement タイプの変数を使用します 
     ' フィールドはクラスでプライベートで、
     ' get プロパティによって作成されます常に表示される要素の単一のインスタンスの場合に
     '適切な方法です
     ' このコードで、TextElement のテキストをコントロールの Text プロパティに 
     ' 設定するためにコントロール プロパティを使用します
     Me.TextElement.Text = Control.Text
     Dim textRect As Rectangle = workRect
     textRect.Height -= workRect.Height / 4
     Me.TextElement.Rect = textRect
     ' 2 つ目の方法はフィールドを使用しません代わりに、ChildElements コレクションで 
     ' そのタイプの要素が既に存在するかどうかを確認し、 
     ' 存在する場合に再使用するためにそれを返しますコレクションに存在しない場合、
     ' 要素を作成します常に表示されるわけではない要素の場合、 
     ' 適切な方法です毎回新しい要素を作成する代わりに、 
     ' 要素を再使用してメモリを節約できます
     ' ボタンの UIElement を作成し、位置を設定します
     ' ChildElements を渡しません。代わりに、PositionChildElements への
     ' 以前の呼び出しで生成されたコレクションへの 
     ' 参照を渡します
     Dim buttonElement As ButtonUIElement = GetButtonElement(ChildElements)
     If me.Enabled then 
	buttonElement.Text = "Click Me!"
Else
	buttonElement.Text = "Disabled"
End If
     Dim buttonRect As Rectangle = workRect
     buttonRect.Size = New Size(workRect.Width / 2, workRect.Height / 4)
     buttonRect.Location = New Point(workRect.Left, workRect.Bottom - buttonRect.Height)
     buttonElement.Rect = buttonRect
     ' コントロールが描画されたときに描画されるために
     ' 要素を ChildElements コレクションに追加します
     Me.ChildElements.Add(Me.TextElement)
     Me.ChildElements.Add(buttonElement)
 End Sub
 Private textUIElement As TextUIElement = Nothing
 Public ReadOnly Property TextElement() As Infragistics.Win.TextUIElement
     Get
         If Me.textUIElement Is Nothing Then
             Me.textUIElement = New TextUIElement(Me, String.Empty)
         End If
         Return Me.textUIElement
     End Get
 End Property
 Private Function GetButtonElement(ByVal childElementsCollection As ArrayList) As ButtonUIElement
     ' ChildElements コレクションで使用可能なボタン
     ' UIElement があるかどうかを確認します
     Dim btn As ButtonUIElement = ExtractExistingElement(childElementsCollection, GetType(ButtonUIElement), True)
     ' そうでない場合、新しいボタンのインスタンスを作成します
     If btn Is Nothing Then
         btn = New ButtonUIElement(Me)
     End If
     Return btn
 End Function