Imports System.Collections Imports Infragistics.Win Protected Overrides Sub PositionChildElements() ' Since RectInsideBorders is calculated on each get, it is ' best to cache the rect returned rather than make multiple ' calls to RectInsideBorders. Dim workRect As Rectangle = Me.RectInsideBorders ' Store a reference to the ChildElements collection, ' we will be using it in our calls to ExtractExistingElement. Dim ChildElements As ArrayList = Me.ChildElements ' Null out the ChildElements collection Me.childElementsCollection = Nothing ' We will be taking two approaches on child element creation. ' The complexity of both methods is rather simple, however ' the appropriateness of the methods is what you should consider when ' making your determination of which to use. ' It should be noted that ' you should be careful if you mix and match the methods. As you cannot ' use them on the same type. ' The first method uses a variable of the type TextUIElement. ' The field is private to the class, and is created through a get ' property. This is most appropriate for single instances of an element 'that will always be visible. ' Here we use the control property to set the ' TextElement's text to the Control's Text property. Me.TextElement.Text = Control.Text Dim textRect As Rectangle = workRect textRect.Height -= workRect.Height / 4 Me.TextElement.Rect = textRect ' The second method does not use a field. Rather it checks the ' ChildElements collection to see if an element of that type already ' exists and returns it to be re-used. If it does not exist in the collection, ' then we create one. This approach is more appropriate for many elements that may not ' always be displayed. It saves memory by re-using elements, rather than ' creating new ones all the time. ' Create and set position of Button UIElement ' Notice we are not passing in ChildElements, but rather a reference to the ' old collection that was populated in the previous call to ' 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 ' Add element to ChildElements collection so that it will be ' drawn when control is painted. 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 ' Check ChildElements collection to see if ' there is a button UIElement that can be used. Dim btn As ButtonUIElement = ExtractExistingElement(childElementsCollection, GetType(ButtonUIElement), True) ' If not button will be nothing in which case we will instantiate a new one. 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() { // Since RectInsideBorders is calculated on each get, it is // best to cache the rect returned rather than make multiple // calls to RectInsideBorders. Rectangle workRect = this.RectInsideBorders; // Store a reference to the ChildElements collection, // we will be using this in our calls to ExtractExistingElement. ArrayList childElements = this.ChildElements; // Null out the ChildElements collection this.childElementsCollection = null; // We will be taking two approaches on child element creation. // The complexity of both methods is rather simple, however // the appropriateness of the methods is what you should consider when // making your determination of which to us. And it should be noted that // you should be careful if you mix and match the methods. As you cannot // use them on the same type. // The first method uses a variable of the type TextUIElement. // The field is private to the class, and is created thru a get // property. This is most appropriate for single instances of an element // that will always be visible. // Here we use the control property to set the // TextElement's text to the Control's Text property. this.TextElement.Text = Control.Text; Rectangle textRect = workRect; textRect.Height -= workRect.Height / 4; this.TextElement.Rect = textRect; // The second method does not use a field. Rather it checks the // ChildElements collection to see if an element of that type already // exists and returns it to be re-used. If it does not exist in the collection, // then we create one. This approach is more appropriate for many elements that may not // always be displayed. This saves memory by re-using elements, rather than // creating new ones all the time. // Create and set position of Button UIElement // Notice we are not passing in ChildElements, but rather a reference to the // old collection that was populated in the previous call to // 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; // Add element to ChildElements collection so that it will be // drawn when control is painted. 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) { // Check ChildElements collection to see if // there is a button UIElement that can be used. ButtonUIElement button = ExtractExistingElement(childElementsCollection, typeof(Infragistics.Win.ButtonUIElement),true) as Infragistics.Win.ButtonUIElement ; // If not button will be null in which case we will instantiate a new one. if(null == button) button = new ButtonUIElement(this); return button; }
Target Platforms: Windows 10, Windows 8.1, Windows 8, Windows 7, Windows Server 2012, Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2