IReferenceService Interface
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
Remarks
The IReferenceService interface provides the following methods:
- The GetReference method returns the component with the specified name, or a null reference (Nothing in Visual Basic) if no component with the specified name was found.
- The GetName method returns the name associated with the specified component.
- The GetComponent method returns the parent container of the specified component.
- The GetReferences method returns an array of references to all project components, or all project components of an optionally specified type.
Example
[Visual Basic, C#, 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++] #using <mscorlib.dll> #using <System.Windows.Forms.dll> #using <System.Data.dll> #using <System.Drawing.dll> #using <System.dll> using namespace System; using namespace System::Collections; using namespace System::ComponentModel; using namespace System::ComponentModel::Design; using namespace System::Drawing; using namespace System::Data; using namespace System::Windows::Forms; // 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 __gc class IReferenceServiceControl : public 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." String* selected_basetypename; // Indicates the name of the selected component. String* selected_componentname; // Contains the names of components of the type of the selected // component in design mode. String* typeComponents[]; // Contains the names of components of the base type of the selected component in design mode. String* basetypeComponents[]; // Reference to the IComponentChangeService for the current component. ISelectionService* selectionService; public: IReferenceServiceControl() { // Initializes the control properties. this->BackColor = Color::White; this->SetStyle(ControlStyles::ResizeRedraw, true); this->Name = S"IReferenceServiceControl"; this->Size = System::Drawing::Size(500, 250); // Initializes the data properties. typeComponents = new String*[0]; basetypeComponents = new String*[0]; selected_typename = S"None selected."; selected_basetypename = S"None selected."; selected_componentname = S"None selected."; selectionService = 0; } // Registers and unregisters design-mode services when // the component is sited and unsited. __property System::ComponentModel::ISite* get_Site() { // Returns the site for the control. return UserControl::get_Site(); } __property void set_Site( System::ComponentModel::ISite* value ) { // 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 != 0) selectionService->SelectionChanged -= new EventHandler(this, &IReferenceServiceControl::OnSelectionChanged); // Sites the control. UserControl::set_Site( value ); // Obtains an ISelectionService interface to register // the selection changed event handler with. selectionService = dynamic_cast<ISelectionService*>(this->GetService(__typeof(ISelectionService))); if( selectionService!= 0 ) { selectionService->SelectionChanged += new EventHandler(this, &IReferenceServiceControl::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 != 0 ) { // 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 = (dynamic_cast<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 = dynamic_cast<IReferenceService*>(this->GetService(__typeof(IReferenceService))); if( rs != 0 ) { // 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] = (dynamic_cast<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] = (dynamic_cast<IComponent*>(comps[i]))->Site->Name; } } else { selected_typename = S"None selected."; selected_basetypename = S"None selected."; selected_componentname = S"None selected."; typeComponents = new String*[0]; basetypeComponents = new String*[0]; } this->Refresh(); } void OnSelectionChanged(Object* /*sender*/, EventArgs* /*e*/) { DisplayComponentsOfSelectedComponentType(); } protected: void OnPaint(System::Windows::Forms::PaintEventArgs* e) { e->Graphics->DrawString(S"IReferenceService Example Control", new System::Drawing::Font(FontFamily::GenericMonospace, 9), new SolidBrush(Color::Blue), 5, 5); e->Graphics->DrawString(S"Primary Selected Component from IComponentChangeService:", new System::Drawing::Font(FontFamily::GenericMonospace, 8), new SolidBrush(Color::Red), 5, 20); e->Graphics->DrawString(String::Format( S"Name: {0}", selected_componentname ), new System::Drawing::Font(FontFamily::GenericMonospace, 8), new SolidBrush(Color::Black), 10, 32); e->Graphics->DrawString(String::Format( S"Type: {0}", selected_typename ), new System::Drawing::Font(FontFamily::GenericMonospace, 8), new SolidBrush(Color::Black), 10, 44); e->Graphics->DrawString(String::Format( S"Base Type: {0}", selected_basetypename ), new System::Drawing::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(S"Components of Type from IReferenceService:", new System::Drawing::Font(FontFamily::GenericMonospace, 8), new SolidBrush(Color::Red), 5, 85); if( !selected_typename->Equals(S"None selected.") ) for(int i=0; i<typeComponents->Length; i++) e->Graphics->DrawString(typeComponents[i], new System::Drawing::Font(FontFamily::GenericMonospace, 8), new SolidBrush(Color::Black), 20.f, 97.f+(i*12)); e->Graphics->DrawString(S"Components of Base Type from IReferenceService:", new System::Drawing::Font(FontFamily::GenericMonospace, 8), new SolidBrush(Color::Red), 5.f, 109.f+(typeComponents->Length*12)); if( !selected_typename->Equals(S"None selected.") ) for(int i=0; i<basetypeComponents->Length; i++) e->Graphics->DrawString(basetypeComponents[i], new System::Drawing::Font(FontFamily::GenericMonospace, 8), new SolidBrush(Color::Black), 20.f, 121.f+(typeComponents->Length*12)+(i*12)); } };
[JScript] No example is available for JScript. To view a Visual Basic, C#, or C++ example, click the Language Filter button
in the upper-left corner of the page.
Requirements
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)
See Also
IReferenceService Members | System.ComponentModel.Design Namespace