Export (0) Print
Expand All

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 Language Filter 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

Show:
© 2014 Microsoft