IDictionaryService Interface
Provides a basic, component site-specific, key-value pair dictionary through a service that a designer can use to store user-defined data.
For a list of all members of this type, see IDictionaryService Members.
[Visual Basic] Public Interface IDictionaryService [C#] public interface IDictionaryService [C++] public __gc __interface IDictionaryService [JScript] public interface IDictionaryService
Remarks
This service provides a simple interface to set, retrieve, and look up objects with associated keys.
Example
[Visual Basic, C#, C++] The following example control and designer use the IDictionaryService to share data through its site-specific key-value pair dictionary.
[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 IDictionaryServiceControl ' This example control works with the IDictionaryServiceDesigner to demonstrate ' using the IDictionaryService for storing data provided by a designer, and ' accessing it from a control. The IDictionaryService provides a Site-specific ' key-based dictionary. An IDictionaryServiceDesigner sets an ArrayList of strings ' to the dictionary with a "DesignerData" key, and its contents are accessed and ' displayed once the Update box is clicked at design time. <DesignerAttribute(GetType(IDictionaryServiceDesigner), GetType(IDesigner))> _ Public Class IDictionaryServiceControl Inherits System.Windows.Forms.UserControl Public al As ArrayList Public Sub New() ' Initializes the example control. al = New ArrayList() Me.Size = New Size(344, 88) Me.BackColor = Color.White End Sub ' Draws the instructions and user interface, and any strings contained ' in a local ArrayList. Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) If Me.DesignMode Then e.Graphics.DrawString("IDictionaryServiceDesigner Control", New Font(FontFamily.GenericMonospace, 9), New SolidBrush(Color.Blue), 5, 4) e.Graphics.DrawString("Click the Update box to update display strings", New Font(FontFamily.GenericMonospace, 8), New SolidBrush(Color.DarkGreen), 5, 17) e.Graphics.DrawString("from the IDictionaryService.", New Font(FontFamily.GenericMonospace, 8), New SolidBrush(Color.DarkGreen), 5, 29) e.Graphics.FillRectangle(New SolidBrush(Color.Beige), 270, 7, 60, 10) e.Graphics.DrawRectangle(New Pen(New SolidBrush(Color.Black), 1), 270, 7, 60, 10) e.Graphics.DrawString("Update", New Font(FontFamily.GenericMonospace, 7), New SolidBrush(Color.Black), 282, 7) Dim i As Integer For i = 0 To al.Count - 1 e.Graphics.DrawString(CStr(al(i)), New Font(FontFamily.GenericMonospace, 8), New SolidBrush(Color.Black), 5, 44 + i * 12) Next i End If End Sub ' On mouse down, this method attempts to access the IDictionaryService and ' obtain an ArrayList with a key of "DesignerData" in the dictionary. ' If successful, this ArrayList is set to the local ArrayList. Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs) ' Attempts to obtain the IDictionaryService using the Control.GetService method. Dim ds As IDictionaryService = CType(GetService(GetType(IDictionaryService)), IDictionaryService) ' If the service was obtained... If Not (ds Is Nothing) Then ' Attempts to retrieve a list with a key of "DesignerData". Dim list As ArrayList = CType(ds.GetValue("DesignerData"), ArrayList) ' If the list exists, sets the list obtained by the ' IDictionaryService to the local list. If Not (list Is Nothing) Then Me.al = list End If Me.Refresh() End If End Sub End Class ' This designer uses the IDictionaryService to store an ArrayList of ' information strings that the associated control can access and ' display. The IDictionaryService creates a new dictionary for each Site. Public Class IDictionaryServiceDesigner Inherits System.Windows.Forms.Design.ControlDesigner Public Sub New() End Sub ' On designer initialization, this method attempts to obtain ' the IDictionaryService, and populates an ArrayList ' associated with a "DesignerData" key in the dictionary with ' designer- and control-related information strings. Public Overrides Sub Initialize(ByVal component As System.ComponentModel.IComponent) MyBase.Initialize(component) Dim ds As IDictionaryService = CType(component.Site.GetService(GetType(IDictionaryService)), IDictionaryService) If Not (ds Is Nothing) Then ' If the dictionary service does not contain a ' DesignerData key, adds an ArrayList for that key. If ds.GetValue("DesignerData") Is Nothing Then ds.SetValue("DesignerData", New ArrayList()) ds.SetValue("DesignerData", New ArrayList()) End If ' Obtains the ArrayList with the "DesignerData" key ' from the dictionary service. Dim al As ArrayList = CType(ds.GetValue("DesignerData"), ArrayList) If Not (al Is Nothing) Then al.Clear() ' Populates the array list with designer and ' control information strings. al.Add(("Designer type: " + Me.GetType().Name)) al.Add(("Control type: " + Me.Control.GetType().Name)) al.Add(("Control name: " + Me.Control.Name)) End If End If End Sub ' Translates the point to client coordinates and passes the ' messages to the control while over the click box. Protected Overrides Function GetHitTest(ByVal point As System.Drawing.Point) As Boolean Dim translated As Point = Me.Control.PointToClient(point) If translated.X > 269 And translated.X < 331 And translated.Y > 7 And translated.Y < 18 Then Return True Else Return MyBase.GetHitTest(point) End If End Function End Class End Namespace [C#] using System; using System.Collections; using System.ComponentModel; using System.ComponentModel.Design; using System.Drawing; using System.Data; using System.Windows.Forms; namespace IDictionaryServiceControl { // This example control works with the IDictionaryServiceDesigner to demonstrate // using the IDictionaryService for storing data provided by a designer, and // accessing it from a control. The IDictionaryService provides a Site-specific // key-based dictionary. An IDictionaryServiceDesigner sets an ArrayList of strings // to the dictionary with a "DesignerData" key, and its contents are accessed and // displayed once the Update box is clicked at design time. [DesignerAttribute(typeof(IDictionaryServiceDesigner), typeof(IDesigner))] public class IDictionaryServiceControl : System.Windows.Forms.UserControl { public ArrayList al; public IDictionaryServiceControl() { // Initializes the example control. al = new ArrayList(); this.Size = new Size(344, 88); this.BackColor = Color.White; } // Draws the instructions and user interface, and any strings contained // in a local ArrayList. protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { if( this.DesignMode ) { e.Graphics.DrawString("IDictionaryServiceDesigner Control", new Font(FontFamily.GenericMonospace, 9), new SolidBrush(Color.Blue), 5, 4); e.Graphics.DrawString("Click the Update box to update display strings", new Font(FontFamily.GenericMonospace, 8), new SolidBrush(Color.DarkGreen), 5, 17); e.Graphics.DrawString("from the IDictionaryService.", new Font(FontFamily.GenericMonospace, 8), new SolidBrush(Color.DarkGreen), 5, 29); e.Graphics.FillRectangle(new SolidBrush(Color.Beige), 270, 7, 60, 10); e.Graphics.DrawRectangle(new Pen(new SolidBrush(Color.Black), 1), 270, 7, 60, 10); e.Graphics.DrawString("Update", new Font(FontFamily.GenericMonospace, 7), new SolidBrush(Color.Black), 282, 7); for( int i=0; i<al.Count; i++ ) e.Graphics.DrawString((string)al[i], new Font(FontFamily.GenericMonospace, 8), new SolidBrush(Color.Black), 5, 44+(i*12)); } } // On mouse down, this method attempts to access the IDictionaryService and // obtain an ArrayList with a key of "DesignerData" in the dictionary. // If successful, this ArrayList is set to the local ArrayList. protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e) { // Attempts to obtain the IDictionaryService using the Control.GetService method. IDictionaryService ds = (IDictionaryService)GetService(typeof(IDictionaryService)); // If the service was obtained... if( ds != null ) { // Attempts to retrieve a list with a key of "DesignerData". ArrayList list = (ArrayList)ds.GetValue( "DesignerData" ); // If the list exists, sets the list obtained by the // IDictionaryService to the local list. if( list != null ) this.al = list; this.Refresh(); } } } // This designer uses the IDictionaryService to store an ArrayList of // information strings that the associated control can access and // display. The IDictionaryService creates a new dictionary for each Site. public class IDictionaryServiceDesigner : System.Windows.Forms.Design.ControlDesigner { public IDictionaryServiceDesigner() { } // On designer initialization, this method attempts to obtain // the IDictionaryService, and populates an ArrayList // associated with a "DesignerData" key in the dictionary with // designer- and control-related information strings. public override void Initialize(System.ComponentModel.IComponent component) { base.Initialize(component); IDictionaryService ds = (IDictionaryService)component.Site.GetService(typeof(IDictionaryService)); if( ds != null ) { // If the dictionary service does not contain a // DesignerData key, adds an ArrayList for that key. if( ds.GetValue( "DesignerData" ) == null ) { ds.SetValue( "DesignerData", new ArrayList() ); ds.SetValue( "DesignerData", new ArrayList() ); } // Obtains the ArrayList with the "DesignerData" key // from the dictionary service. ArrayList al = (ArrayList)ds.GetValue( "DesignerData" ); if( al != null ) { al.Clear(); // Populates the array list with designer and // control information strings. al.Add( "Designer type: "+this.GetType().Name ); al.Add( "Control type: "+this.Control.GetType().Name ); al.Add( "Control name: "+this.Control.Name ); } } } protected override bool GetHitTest(System.Drawing.Point point) { // Translates the point to client coordinates and passes the // messages to the control while over the click box. Point translated = this.Control.PointToClient(point); if( translated.X > 269 && translated.X < 331 && translated.Y > 7 && translated.Y < 18 ) return true; else return base.GetHitTest(point); } } } [C++] #using <mscorlib.dll> #using <System.Design.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; using namespace System::Windows::Forms::Design; namespace IDictionaryServiceControl { public __gc class IDictionaryServiceDesigner; // This example control works with the IDictionaryServiceDesigner to demonstrate // using the IDictionaryService for storing data provided by a designer, and // accessing it from a control. The IDictionaryService provides a Site-specific // key-based dictionary. An IDictionaryServiceDesigner sets an ArrayList of strings // to the dictionary with a "DesignerData" key, and its contents are accessed and // displayed once the Update box is clicked at design time. [DesignerAttribute(__typeof(IDictionaryServiceDesigner), __typeof(IDesigner))] public __gc class IDictionaryServiceControl : public System::Windows::Forms::UserControl { public: ArrayList* al; IDictionaryServiceControl() { // Initializes the example control. al = new ArrayList(); this->Size = System::Drawing::Size(344, 88); this->BackColor = Color::White; } // Draws the instructions and user interface, and any strings contained // in a local ArrayList. protected: void OnPaint(System::Windows::Forms::PaintEventArgs* e) { if( this->DesignMode ) { e->Graphics->DrawString(S"IDictionaryServiceDesigner Control", new System::Drawing::Font(FontFamily::GenericMonospace, 9), new SolidBrush(Color::Blue), 5, 4); e->Graphics->DrawString(S"Click the Update box to update display strings", new System::Drawing::Font(FontFamily::GenericMonospace, 8), new SolidBrush(Color::DarkGreen), 5, 17); e->Graphics->DrawString(S"from the IDictionaryService.", new System::Drawing::Font(FontFamily::GenericMonospace, 8), new SolidBrush(Color::DarkGreen), 5, 29); e->Graphics->FillRectangle(new SolidBrush(Color::Beige), 270, 7, 60, 10); e->Graphics->DrawRectangle(new Pen(new SolidBrush(Color::Black), 1), 270, 7, 60, 10); e->Graphics->DrawString(S"Update", new System::Drawing::Font(FontFamily::GenericMonospace, 7), new SolidBrush(Color::Black), 282, 7); for( int i=0; i<al->Count; i++ ) e->Graphics->DrawString(dynamic_cast<String*>(al->Item[i]), new System::Drawing::Font(FontFamily::GenericMonospace, 8), new SolidBrush(Color::Black), 5.0f, 44.0f+(i*12)); } } // On mouse down, this method attempts to access the IDictionaryService and // obtain an ArrayList with a key of "DesignerData" in the dictionary. // If successful, this ArrayList is set to the local ArrayList. void OnMouseDown(System::Windows::Forms::MouseEventArgs* /*e*/) { // Attempts to obtain the IDictionaryService using the Control.GetService method. IDictionaryService* ds = dynamic_cast<IDictionaryService*>(GetService(__typeof(IDictionaryService))); // If the service was obtained... if( ds != 0 ) { // Attempts to retrieve a list with a key of "DesignerData". ArrayList* list = dynamic_cast<ArrayList*>(ds->GetValue( S"DesignerData" )); // If the list exists, sets the list obtained by the // IDictionaryService to the local list. if( list != 0 ) this->al = list; this->Refresh(); } } }; // This designer uses the IDictionaryService to store an ArrayList of // information strings that the associated control can access and // display. The IDictionaryService creates a new dictionary for each Site. public __gc class IDictionaryServiceDesigner : public System::Windows::Forms::Design::ControlDesigner { public: IDictionaryServiceDesigner() { } // On designer initialization, this method attempts to obtain // the IDictionaryService, and populates an ArrayList // associated with a "DesignerData" key in the dictionary with // designer- and control-related information strings. void Initialize(System::ComponentModel::IComponent* component) { ControlDesigner::Initialize(component); IDictionaryService* ds = dynamic_cast<IDictionaryService*>(component->Site->GetService(__typeof(IDictionaryService))); if( ds != 0 ) { // If the dictionary service does not contain a // DesignerData key, adds an ArrayList for that key. if( ds->GetValue( S"DesignerData" ) == 0 ) { ds->SetValue( S"DesignerData", new ArrayList() ); ds->SetValue( S"DesignerData", new ArrayList() ); } // Obtains the ArrayList with the "DesignerData" key // from the dictionary service. ArrayList* al = dynamic_cast<ArrayList*>(ds->GetValue( S"DesignerData" )); if( al != 0 ) { al->Clear(); // Populates the array list with designer and // control information strings. al->Add( String::Format( S"Designer type: {0}", this->GetType()->Name ) ); al->Add( String::Format( S"Control type: {0}", this->Control->GetType()->Name ) ); al->Add( String::Format( S"Control name: {0}", this->Control->Name ) ); } } } protected: bool GetHitTest(System::Drawing::Point point) { // Translates the point to client coordinates and passes the // messages to the control while over the click box. Point translated = this->Control->PointToClient(point); if( translated.X > 269 && translated.X < 331 && translated.Y > 7 && translated.Y < 18 ) return true; else return ControlDesigner::GetHitTest(point); } }; }
[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
IDictionaryService Members | System.ComponentModel.Design Namespace