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