IResourceService Interface
Provides an interface for designers to access resource readers and writers for specific CultureInfo resource types.
For a list of all members of this type, see IResourceService Members.
[Visual Basic] Public Interface IResourceService [C#] public interface IResourceService [C++] public __gc __interface IResourceService [JScript] public interface IResourceService
Remarks
A resource writer or resource reader can be used to serialize or deserialze objects or data according to the specified CultureInfo resource settings.
Example
[Visual Basic, C#, C++] The following example demonstrates a designer that uses the IResourceService to read from and write to resource files in order to configure a property of an associated control.
[Visual Basic] Imports System Imports System.Collections Imports System.ComponentModel Imports System.ComponentModel.Design Imports System.Drawing Imports System.Globalization Imports System.Resources Imports System.Windows.Forms Imports System.Windows.Forms.Design Namespace IResourceServiceExample ' Associates the ResourceTestControlDesigner with the ' ResourceTestControl class. <Designer(GetType(ResourceTestControlDesigner))> _ Public Class ResourceTestControl Inherits System.Windows.Forms.UserControl ' Initializes a string array used to store strings that this control displays. Public resource_strings() As String = {"Initial Default String #1", "Initial Default String #2"} Public Sub New() Me.BackColor = Color.White Me.Size = New Size(408, 160) End Sub ' Draws the strings contained in the string array. Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) e.Graphics.DrawString("IResourceService Example Designer Control", New Font(FontFamily.GenericMonospace, 10), New SolidBrush(Color.Blue), 2, 2) e.Graphics.DrawString("String list: (use shortcut menu in design mode)", New Font(FontFamily.GenericMonospace, 8), New SolidBrush(Color.Black), 2, 20) Dim i As Integer For i = 0 To resource_strings.Length - 1 e.Graphics.DrawString(resource_strings(i), New Font(FontFamily.GenericMonospace, 8), New SolidBrush(Color.SeaGreen), 2, 38 + (i * 18)) Next i End Sub End Class _ ' This designer offers several menu commands for the ' shortcut menu for the associated control. ' These commands can be used to reset the control's string ' list, to generate a default resources file, or to load the string ' list for the control from the default resources file. Public Class ResourceTestControlDesigner Inherits System.Windows.Forms.Design.ControlDesigner Public Sub New() End Sub Public Overrides ReadOnly Property Verbs() As System.ComponentModel.Design.DesignerVerbCollection Get ' Creates a collection of designer verb menu commands ' that link to event handlers in this designer. Return New DesignerVerbCollection(New DesignerVerb() { _ New DesignerVerb("Load Strings From Default Resources File", AddressOf Me.LoadResources), _ New DesignerVerb("Create Default Resources File", AddressOf Me.CreateResources), _ New DesignerVerb("Clear ResourceTestControl String List", AddressOf Me.ClearStrings)}) End Get End Property ' Sets the string list for the control to the strings ' loaded from a resource file. Private Sub LoadResources(ByVal sender As Object, ByVal e As EventArgs) Dim rs As IResourceService = CType(Me.Component.Site.GetService(GetType(IResourceService)), IResourceService) If rs Is Nothing Then Throw New Exception("Could not obtain IResourceService.") End If Dim rr As IResourceReader = rs.GetResourceReader(CultureInfo.CurrentUICulture) If rr Is Nothing Then Throw New Exception("Resource file could not be obtained. You may need to create one first.") End If Dim de As IDictionaryEnumerator = rr.GetEnumerator() If Me.Control.GetType() Is GetType(ResourceTestControl) Then Dim rtc As ResourceTestControl = CType(Me.Control, ResourceTestControl) Dim s1, s2, s3 As String de.MoveNext() s1 = CStr(CType(de.Current, DictionaryEntry).Value) de.MoveNext() s2 = CStr(CType(de.Current, DictionaryEntry).Value) de.MoveNext() s3 = CStr(CType(de.Current, DictionaryEntry).Value) de.MoveNext() rtc.resource_strings = New String() {s1, s2, s3} Me.Control.Refresh() End If End Sub ' Creates a default resource file for the current ' CultureInfo and adds 3 strings to it. Private Sub CreateResources(ByVal sender As Object, ByVal e As EventArgs) Dim rs As IResourceService = CType(Me.Component.Site.GetService(GetType(IResourceService)), IResourceService) If rs Is Nothing Then Throw New Exception("Could not obtain IResourceService.") End If Dim rw As IResourceWriter = rs.GetResourceWriter(CultureInfo.CurrentUICulture) rw.AddResource("string1", "Persisted resource string #1") rw.AddResource("string2", "Persisted resource string #2") rw.AddResource("string3", "Persisted resource string #3") rw.Generate() rw.Close() End Sub ' Clears the string list of the associated ResourceTestControl. Private Sub ClearStrings(ByVal sender As Object, ByVal e As EventArgs) If Me.Control.GetType() Is GetType(ResourceTestControl) Then Dim rtc As ResourceTestControl = CType(Me.Control, ResourceTestControl) rtc.resource_strings = New String() {"Test String #1", "Test String #2"} Me.Control.Refresh() End If End Sub End Class End Namespace [C#] using System; using System.Collections; using System.ComponentModel; using System.ComponentModel.Design; using System.Drawing; using System.Globalization; using System.Resources; using System.Windows.Forms; using System.Windows.Forms.Design; namespace IResourceServiceExample { // Associates the ResourceTestControlDesigner with the // ResourceTestControl class. [Designer(typeof(ResourceTestControlDesigner))] public class ResourceTestControl : System.Windows.Forms.UserControl { // Initializes a string array used to store strings that // this control displays. public string[] resource_strings = new string[] { "Initial Default String #1", "Initial Default String #2" }; public ResourceTestControl() { this.BackColor = Color.White; this.Size = new Size(408, 160); } // Draws the strings contained in the string array. protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { e.Graphics.DrawString("IResourceService Example Designer Control", new Font(FontFamily.GenericMonospace, 10), new SolidBrush(Color.Blue), 2, 2); e.Graphics.DrawString("String list: (use shortcut menu in design mode)", new Font(FontFamily.GenericMonospace, 8), new SolidBrush(Color.Black), 2, 20); for(int i=0; i<resource_strings.Length; i++) { e.Graphics.DrawString(resource_strings[i], new Font(FontFamily.GenericMonospace, 8), new SolidBrush(Color.SeaGreen), 2, 38+(i*18)); } } } // This designer offers several menu commands for the // shortcut menu for the associated control. // These commands can be used to reset the control's string // list, to generate a default resources file, or to load the string // list for the control from the default resources file. public class ResourceTestControlDesigner : System.Windows.Forms.Design.ControlDesigner { public ResourceTestControlDesigner() {} public override System.ComponentModel.Design.DesignerVerbCollection Verbs { get { // Creates a collection of designer verb menu commands // that link to event handlers in this designer. return new DesignerVerbCollection( new DesignerVerb[] { new DesignerVerb("Load Strings from Default Resources File", new EventHandler(this.LoadResources)), new DesignerVerb("Create Default Resources File", new EventHandler(this.CreateResources)), new DesignerVerb("Clear ResourceTestControl String List", new EventHandler(this.ClearStrings)) }); } } // Sets the string list for the control to the strings // loaded from a resource file. private void LoadResources(object sender, EventArgs e) { IResourceService rs = (IResourceService)this.Component.Site.GetService(typeof(IResourceService)); if( rs == null ) throw new Exception("Could not obtain IResourceService."); IResourceReader rr = rs.GetResourceReader(CultureInfo.CurrentUICulture); if( rr == null ) throw new Exception("Resource file could not be obtained. You may need to create one first."); IDictionaryEnumerator de = rr.GetEnumerator(); if(this.Control.GetType() == typeof(ResourceTestControl)) { ResourceTestControl rtc = (ResourceTestControl)this.Control; string s1, s2, s3; de.MoveNext(); s1 = (string)((DictionaryEntry)de.Current).Value; de.MoveNext(); s2 = (string)((DictionaryEntry)de.Current).Value; de.MoveNext(); s3 = (string)((DictionaryEntry)de.Current).Value; de.MoveNext(); rtc.resource_strings = new string[] {s1, s2, s3}; this.Control.Refresh(); } } // Creates a default resource file for the current // CultureInfo and adds 3 strings to it. private void CreateResources(object sender, EventArgs e) { IResourceService rs = (IResourceService)this.Component.Site.GetService(typeof(IResourceService)); if( rs == null ) throw new Exception("Could not obtain IResourceService."); IResourceWriter rw = rs.GetResourceWriter(CultureInfo.CurrentUICulture); rw.AddResource("string1", "Persisted resource string #1"); rw.AddResource("string2", "Persisted resource string #2"); rw.AddResource("string3", "Persisted resource string #3"); rw.Generate(); rw.Close(); } // Clears the string list of the associated ResourceTestControl. private void ClearStrings(object sender, EventArgs e) { if(this.Control.GetType() == typeof(ResourceTestControl)) { ResourceTestControl rtc = (ResourceTestControl)this.Control; rtc.resource_strings = new string[] { "Test String #1", "Test String #2" }; this.Control.Refresh(); } } } } [C++] #using <mscorlib.dll> #using <System.Windows.Forms.dll> #using <System.Drawing.dll> #using <System.Design.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::Globalization; using namespace System::Resources; using namespace System::Windows::Forms; using namespace System::Windows::Forms::Design; public __gc class ResourceTestControlDesigner; // Associates the ResourceTestControlDesigner with the // ResourceTestControl class. [Designer(__typeof(ResourceTestControlDesigner))] public __gc class ResourceTestControl : public System::Windows::Forms::UserControl { // Initializes a string array used to store strings that // this control displays. public: String* resource_strings[]; ResourceTestControl() { String* temp[] = { S"Initial Default String #1", S"Initial Default String #2" }; resource_strings = temp; this->BackColor = Color::White; this->Size = System::Drawing::Size(408, 160); } // Draws the strings contained in the string array. protected: void OnPaint(System::Windows::Forms::PaintEventArgs* e) { e->Graphics->DrawString(S"IResourceService Example Designer Control", new System::Drawing::Font(FontFamily::GenericMonospace, 10), new SolidBrush(Color::Blue), 2, 2); e->Graphics->DrawString(S"String list: (use shortcut menu in design mode)", new System::Drawing::Font(FontFamily::GenericMonospace, 8), new SolidBrush(Color::Black), 2, 20); for(int i=0; i<resource_strings->Length; i++) { e->Graphics->DrawString(resource_strings[i], new System::Drawing::Font(FontFamily::GenericMonospace, 8), new SolidBrush(Color::SeaGreen), 2.f, 38.f+(i*18)); } } }; // This designer offers several menu commands for the // shortcut menu for the associated control. // These commands can be used to reset the control's string // list, to generate a default resources file, or to load the string // list for the control from the default resources file. public __gc class ResourceTestControlDesigner : public System::Windows::Forms::Design::ControlDesigner { public: ResourceTestControlDesigner() {} __property System::ComponentModel::Design::DesignerVerbCollection* get_Verbs() { // Creates a collection of designer verb menu commands // that link to event handlers in this designer. DesignerVerb* temp0 [] = { new DesignerVerb(S"Load Strings from Default Resources File", new EventHandler(this, &ResourceTestControlDesigner::LoadResources)), new DesignerVerb(S"Create Default Resources File", new EventHandler(this, &ResourceTestControlDesigner::CreateResources)), new DesignerVerb(S"Clear ResourceTestControl String List", new EventHandler(this, &ResourceTestControlDesigner::ClearStrings))}; return new DesignerVerbCollection( temp0); } // Sets the string list for the control to the strings // loaded from a resource file. private: void LoadResources(Object* /*sender*/, EventArgs* /*e*/) { IResourceService* rs = dynamic_cast<IResourceService*> (this->Component->Site->GetService(__typeof(IResourceService))); if( rs == 0 ) throw new Exception(S"Could not obtain IResourceService."); IResourceReader* rr = rs->GetResourceReader(CultureInfo::CurrentUICulture); if( rr == 0 ) throw new Exception(S"Resource file could not be obtained. You may need to create one first."); IDictionaryEnumerator* de = rr->GetEnumerator(); if(this->Control->GetType() == __typeof(ResourceTestControl)) { ResourceTestControl* rtc = dynamic_cast<ResourceTestControl*>(this->Control); String* s1; String* s2; String* s3; de->MoveNext(); s1 = dynamic_cast<String*>((*dynamic_cast<DictionaryEntry*>(de->Current)).Value); de->MoveNext(); s2 = dynamic_cast<String*>((*dynamic_cast<DictionaryEntry*>(de->Current)).Value); de->MoveNext(); s3 = dynamic_cast<String*>((*dynamic_cast<DictionaryEntry*>(de->Current)).Value); de->MoveNext(); String* temp[] = { s1, s2, s3 }; rtc->resource_strings = temp; this->Control->Refresh(); } } // Creates a default resource file for the current // CultureInfo and adds 3 strings to it. void CreateResources(Object* /*sender*/, EventArgs* /*e*/) { IResourceService* rs = dynamic_cast<IResourceService*> (this->Component->Site->GetService(__typeof(IResourceService))); if( rs == 0 ) throw new Exception(S"Could not obtain IResourceService."); IResourceWriter* rw = rs->GetResourceWriter(CultureInfo::CurrentUICulture); rw->AddResource(S"string1", S"Persisted resource string #1"); rw->AddResource(S"string2", S"Persisted resource string #2"); rw->AddResource(S"string3", S"Persisted resource string #3"); rw->Generate(); rw->Close(); } // Clears the string list of the associated ResourceTestControl. void ClearStrings(Object* /*sender*/, EventArgs* /*e*/) { if(this->Control->GetType() == __typeof(ResourceTestControl)) { ResourceTestControl* rtc = dynamic_cast<ResourceTestControl*>(this->Control); String* temp[] = { S"Test String #1", S"Test String #2" }; rtc->resource_strings = temp; this->Control->Refresh(); } } };
[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
IResourceService Members | System.ComponentModel.Design Namespace | CultureInfo