Provides an interface for obtaining references to objects within a project by name or type, obtaining the name of a specified object, and for locating the parent of a specified object within a designer project.
For a list of all members of this type, see IReferenceService Members.
[Visual Basic] Public Interface IReferenceService [C#] public interface IReferenceService [C++] public __gc __interface IReferenceService [JScript] public interface IReferenceService
The IReferenceService interface provides the following methods:
[Visual Basic, C#] The following example control uses the GetReferences method of the IReferenceService interface to obtain a list of components in the current design mode project of the type of the currently selected component.
[Visual Basic] Imports System Imports System.Collections Imports System.ComponentModel Imports System.ComponentModel.Design Imports System.Drawing Imports System.Data Imports System.Windows.Forms Namespace IReferenceServiceExample ' This control displays the name and type of the primary selection ' component in design mode, if there is one, ' and uses the IReferenceService interface to display the names of ' any components of the type of the primary selected component. ' This control uses the IComponentChangeService to monitor for ' selection changed events. Public Class IReferenceServiceControl Inherits System.Windows.Forms.UserControl ' Indicates the name of the type of the selected component, or "None selected." Private selected_typename As String ' Indicates the name of the base type of the selected component, or "None selected." Private selected_basetypename As String ' Indicates the name of the selected component. Private selected_componentname As String ' Contains the names of components of the type of the selected ' component in design mode. Private typeComponents() As String ' Contains the names of components of the base type of the selected component in design mode. Private basetypeComponents() As String ' Reference to the IComponentChangeService for the current component. Private selectionService As ISelectionService Public Sub New() ' Initializes the control properties. Me.BackColor = Color.White Me.SetStyle(ControlStyles.ResizeRedraw, True) Me.Name = "IReferenceServiceControl" Me.Size = New System.Drawing.Size(500, 250) ' Initializes the data properties. typeComponents = New String(0) {} basetypeComponents = New String(0) {} selected_typename = "None selected." selected_basetypename = "None selected." selected_componentname = "None selected." selectionService = Nothing End Sub ' Registers and unregisters design-mode services when ' the component is sited and unsited. Public Overrides Property Site() As System.ComponentModel.ISite Get ' Returns the site for the control. Return MyBase.Site End Get Set(ByVal Value As System.ComponentModel.ISite) ' The site is set to null when a component is cut or ' removed from a design-mode site. ' If an event handler has already been linked with ' an ISelectionService, remove the handler. If Not (selectionService Is Nothing) Then RemoveHandler selectionService.SelectionChanged, AddressOf Me.OnSelectionChanged End If ' Sites the control. MyBase.Site = Value ' Obtains an ISelectionService interface to register ' the selection changed event handler with. selectionService = CType(Me.GetService(GetType(ISelectionService)), ISelectionService) If Not (selectionService Is Nothing) Then AddHandler selectionService.SelectionChanged, AddressOf Me.OnSelectionChanged ' Updates the display for the current selection, if any. DisplayComponentsOfSelectedComponentType() End If End Set End Property ' Updates the display according to the primary selected component, ' if any, and the names of design-mode components that the ' IReferenceService returns references for when queried for ' references to components of the primary selected component's ' type and base type. Private Sub DisplayComponentsOfSelectedComponentType() ' If a component is selected... If Not (selectionService.PrimarySelection Is Nothing) Then ' Sets the selected type name and selected component name ' to the type and name of the primary selected component. selected_typename = selectionService.PrimarySelection.GetType().FullName selected_basetypename = selectionService.PrimarySelection.GetType().BaseType.FullName selected_componentname = CType(selectionService.PrimarySelection, IComponent).Site.Name ' Obtain an IReferenceService and obtain references to ' each component in the design-mode project. ' of the selected component's type and base type. Dim rs As IReferenceService = CType(Me.GetService(GetType(IReferenceService)), IReferenceService) If Not (rs Is Nothing) Then ' Get references to design-mode components of the ' primary selected component's type. Dim comps As Object() = CType(rs.GetReferences(selectionService.PrimarySelection.GetType()), Object()) typeComponents = New String(comps.Length) {} Dim i As Integer For i = 0 To comps.Length - 1 typeComponents(i) = CType(comps(i), IComponent).Site.Name Next i ' Get references to design-mode components with a base type ' of the primary selected component's base type. comps = CType(rs.GetReferences(selectionService.PrimarySelection.GetType().BaseType), Object()) basetypeComponents = New String(comps.Length) {} For i = 0 To comps.Length - 1 basetypeComponents(i) = CType(comps(i), IComponent).Site.Name Next i End If Else selected_typename = "None selected." selected_basetypename = "None selected." selected_componentname = "None selected." typeComponents = New String(0) {} basetypeComponents = New String(0) {} End If Me.Refresh() End Sub 'DisplayComponentsOfSelectedComponentType Private Sub OnSelectionChanged(ByVal sender As Object, ByVal e As EventArgs) DisplayComponentsOfSelectedComponentType() End Sub 'OnSelectionChanged Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) e.Graphics.DrawString("IReferenceService Example Control", New Font(FontFamily.GenericMonospace, 9), New SolidBrush(Color.Blue), 5, 5) e.Graphics.DrawString("Primary Selected Component from IComponentChangeService:", New Font(FontFamily.GenericMonospace, 8), New SolidBrush(Color.Red), 5, 20) e.Graphics.DrawString("Name: " + selected_componentname, New Font(FontFamily.GenericMonospace, 8), New SolidBrush(Color.Black), 10, 32) e.Graphics.DrawString("Type: " + selected_typename, New Font(FontFamily.GenericMonospace, 8), New SolidBrush(Color.Black), 10, 44) e.Graphics.DrawString("Base Type: " + selected_basetypename, New Font(FontFamily.GenericMonospace, 8), New SolidBrush(Color.Black), 10, 56) e.Graphics.DrawLine(New Pen(New SolidBrush(Color.Black), 1), 5, 77, Me.Width - 10, 77) e.Graphics.DrawString("Components of Type from IReferenceService:", New Font(FontFamily.GenericMonospace, 8), New SolidBrush(Color.Red), 5, 85) If selected_typename <> "None selected." Then Dim i As Integer For i = 0 To typeComponents.Length - 1 e.Graphics.DrawString(typeComponents(i), New Font(FontFamily.GenericMonospace, 8), New SolidBrush(Color.Black), 20, 97 + i * 12) Next i End If e.Graphics.DrawString("Components of Base Type from IReferenceService:", New Font(FontFamily.GenericMonospace, 8), New SolidBrush(Color.Red), 5, 109 + typeComponents.Length * 12) If selected_typename <> "None selected." Then Dim i As Integer For i = 0 To basetypeComponents.Length - 1 e.Graphics.DrawString(basetypeComponents(i), New Font(FontFamily.GenericMonospace, 8), New SolidBrush(Color.Black), 20, 121 + typeComponents.Length * 12 + i * 12) Next i End If End Sub 'OnPaint End Class 'IReferenceServiceControl End Namespace 'IReferenceServiceExample [C#] using System; using System.Collections; using System.ComponentModel; using System.ComponentModel.Design; using System.Drawing; using System.Data; using System.Windows.Forms; namespace IReferenceServiceExample { // This control displays the name and type of the primary selection // component in design mode, if there is one, // and uses the IReferenceService interface to display the names of // any components of the type of the primary selected component. // This control uses the IComponentChangeService to monitor for // selection changed events. public class IReferenceServiceControl : System.Windows.Forms.UserControl { // Indicates the name of the type of the selected component, or "None selected.". private string selected_typename; // Indicates the name of the base type of the selected component, or "None selected." private string selected_basetypename; // Indicates the name of the selected component. private string selected_componentname; // Contains the names of components of the type of the selected // component in design mode. private string[] typeComponents; // Contains the names of components of the base type of the selected component in design mode. private string[] basetypeComponents; // Reference to the IComponentChangeService for the current component. private ISelectionService selectionService; public IReferenceServiceControl() { // Initializes the control properties. this.BackColor = Color.White; this.SetStyle(ControlStyles.ResizeRedraw, true); this.Name = "IReferenceServiceControl"; this.Size = new System.Drawing.Size(500, 250); // Initializes the data properties. typeComponents = new string[0]; basetypeComponents = new string[0]; selected_typename = "None selected."; selected_basetypename = "None selected."; selected_componentname = "None selected."; selectionService = null; } // Registers and unregisters design-mode services when // the component is sited and unsited. public override System.ComponentModel.ISite Site { get { // Returns the site for the control. return base.Site; } set { // The site is set to null when a component is cut or // removed from a design-mode site. // If an event handler has already been linked with // an ISelectionService, remove the handler. if(selectionService != null) selectionService.SelectionChanged -= new EventHandler(this.OnSelectionChanged); // Sites the control. base.Site = value; // Obtains an ISelectionService interface to register // the selection changed event handler with. selectionService = (ISelectionService)this.GetService(typeof(ISelectionService)); if( selectionService!= null ) { selectionService.SelectionChanged += new EventHandler(this.OnSelectionChanged); // Updates the display for the current selection, if any. DisplayComponentsOfSelectedComponentType(); } } } // Updates the display according to the primary selected component, // if any, and the names of design-mode components that the // IReferenceService returns references for when queried for // references to components of the primary selected component's // type and base type. private void DisplayComponentsOfSelectedComponentType() { // If a component is selected... if( selectionService.PrimarySelection != null ) { // Sets the selected type name and selected component name to the type and name of the primary selected component. selected_typename = selectionService.PrimarySelection.GetType().FullName; selected_basetypename = selectionService.PrimarySelection.GetType().BaseType.FullName; selected_componentname = ((IComponent)selectionService.PrimarySelection).Site.Name; // Obtain an IReferenceService and obtain references to // each component in the design-mode project // of the selected component's type and base type. IReferenceService rs = (IReferenceService)this.GetService(typeof(IReferenceService)); if( rs != null ) { // Get references to design-mode components of the // primary selected component's type. object[] comps = (object[])rs.GetReferences( selectionService.PrimarySelection.GetType() ); typeComponents = new string[comps.Length]; for(int i=0; i<comps.Length; i++) typeComponents[i] = ((IComponent)comps[i]).Site.Name; // Get references to design-mode components with a base type // of the primary selected component's base type. comps = (object[])rs.GetReferences( selectionService.PrimarySelection.GetType().BaseType ); basetypeComponents = new string[comps.Length]; for(int i=0; i<comps.Length; i++) basetypeComponents[i] = ((IComponent)comps[i]).Site.Name; } } else { selected_typename = "None selected."; selected_basetypename = "None selected."; selected_componentname = "None selected."; typeComponents = new string[0]; basetypeComponents = new string[0]; } this.Refresh(); } private void OnSelectionChanged(object sender, EventArgs e) { DisplayComponentsOfSelectedComponentType(); } protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { e.Graphics.DrawString("IReferenceService Example Control", new Font(FontFamily.GenericMonospace, 9), new SolidBrush(Color.Blue), 5, 5); e.Graphics.DrawString("Primary Selected Component from IComponentChangeService:", new Font(FontFamily.GenericMonospace, 8), new SolidBrush(Color.Red), 5, 20); e.Graphics.DrawString("Name: "+selected_componentname, new Font(FontFamily.GenericMonospace, 8), new SolidBrush(Color.Black), 10, 32); e.Graphics.DrawString("Type: "+selected_typename, new Font(FontFamily.GenericMonospace, 8), new SolidBrush(Color.Black), 10, 44); e.Graphics.DrawString("Base Type: "+selected_basetypename, new Font(FontFamily.GenericMonospace, 8), new SolidBrush(Color.Black), 10, 56); e.Graphics.DrawLine(new Pen(new SolidBrush(Color.Black), 1), 5, 77, this.Width-5, 77); e.Graphics.DrawString("Components of Type from IReferenceService:", new Font(FontFamily.GenericMonospace, 8), new SolidBrush(Color.Red), 5, 85); if( selected_typename != "None selected." ) for(int i=0; i<typeComponents.Length; i++) e.Graphics.DrawString(typeComponents[i], new Font(FontFamily.GenericMonospace, 8), new SolidBrush(Color.Black), 20, 97+(i*12)); e.Graphics.DrawString("Components of Base Type from IReferenceService:", new Font(FontFamily.GenericMonospace, 8), new SolidBrush(Color.Red), 5, 109+(typeComponents.Length*12)); if( selected_typename != "None selected." ) for(int i=0; i<basetypeComponents.Length; i++) e.Graphics.DrawString(basetypeComponents[i], new Font(FontFamily.GenericMonospace, 8), new SolidBrush(Color.Black), 20, 121+(typeComponents.Length*12)+(i*12)); } } }
[C++, JScript] No example is available for C++ or JScript. To view a Visual Basic or C# example, click the Language Filter button
in the upper-left corner of the page.
Namespace: System.ComponentModel.Design
Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family
Assembly: System (in System.dll)
IReferenceService Members | System.ComponentModel.Design Namespace