'宣言 Protected Overridable Sub PositionChildElements()
protected virtual void PositionChildElements()
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
using System.Collections; using Infragistics.Win; protected override void PositionChildElements() { // RectInsideBorders は各取得操作で計算されるため、 // RectInsideBorders を複数回呼び出す代わりに、 // 返された矩形をキャッシュすることを推薦します Rectangle workRect = this.RectInsideBorders; // ChildElements コレクションへの参照を保存します // ExtractExistingElement への呼び出しでそのコレクションを使用します ArrayList childElements = this.ChildElements; // ChildElements コレクションを null 値に設定します this.childElementsCollection = null; // 子要素を作成する方法は 2 つあります // どちらの方法も簡単ですが、 // 使用する方法は // どちらが適切であるかによって決定してください。両方の方法を使用する場合、 // 同じタイプで使用できないことに注意して // ください // 最初の方法は TextUIElement タイプの変数を使用します // フィールドはクラスでプライベートで、 // get プロパティによって作成されます常に表示される要素の単一のインスタンスの場合に // 適切な方法です // このコードで、TextElement のテキストをコントロールの Text プロパティに // 設定するためにコントロール プロパティを使用します this.TextElement.Text = Control.Text; Rectangle textRect = workRect; textRect.Height -= workRect.Height / 4; this.TextElement.Rect = textRect; // 2 番目の方法はフィールドを使用しません代わりに、ChildElements コレクションで // そのタイプの要素が既に存在するかどうかを確認し、 // 存在する場合に再使用するためにそれを返しますコレクションに存在しない場合、 // 要素を作成します常に表示されるわけではない要素の場合、 // これは適切な方法です毎回新しい要素を作成する代わりに、 // 要素を再使用してメモリを節約できます // ボタンの UIElement を作成し、位置を設定します // ChildElements を渡しません。代わりに、PositionChildElements への // 以前の呼び出しで生成されたコレクションへの // 参照を渡します ButtonUIElement buttonElement = GetButtonElement(childElements); if(this.Enabled) buttonElement.Text = "Click Me!"; else buttonElement.Text = "Disabled"; Rectangle buttonRect = 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 コレクションに追加します this.ChildElements.Add(TextElement); this.ChildElements.Add(buttonElement); } private TextUIElement textUIElement = null; private TextUIElement TextElement { get { if(null == this.textUIElement) this.textUIElement = new TextUIElement(this,string.Empty ); return this.textUIElement; } } private ButtonUIElement GetButtonElement(ArrayList childElementsCollection) { // ChildElements コレクションで使用可能なボタン // UIElement があるかどうかを確認します ButtonUIElement button = ExtractExistingElement(childElementsCollection, typeof(Infragistics.Win.ButtonUIElement),true) as Infragistics.Win.ButtonUIElement ; // そうでない場合、新しいボタンをインスタンスを作成します if(null == button) button = new ButtonUIElement(this); return button; }