Muokkaa

Jaa


IResourceService Interface

Definition

Provides an interface for designers to access resource readers and writers for specific CultureInfo resource types.

public interface class IResourceService
public interface IResourceService
type IResourceService = interface
Public Interface IResourceService

Examples

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.

#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;
ref class ResourceTestControlDesigner;

// Associates the ResourceTestControlDesigner with the
// ResourceTestControl class.

[Designer(ResourceTestControlDesigner::typeid)]
public ref class ResourceTestControl: public System::Windows::Forms::UserControl
{
public:

   // Initializes a string array used to store strings that
   // this control displays.
   array<String^>^resource_strings;
   ResourceTestControl()
   {
      array<String^>^temp = {"Initial Default String #1","Initial Default String #2"};
      resource_strings = temp;
      this->BackColor = Color::White;
      this->Size = System::Drawing::Size( 408, 160 );
   }

protected:

   // Draws the strings contained in the string array.
   virtual void OnPaint( System::Windows::Forms::PaintEventArgs^ e ) override
   {
      e->Graphics->DrawString( "IResourceService Example Designer Control", gcnew System::Drawing::Font( FontFamily::GenericMonospace,10 ), gcnew SolidBrush( Color::Blue ), 2, 2 );
      e->Graphics->DrawString( "String list:  (use shortcut menu in design mode)", gcnew System::Drawing::Font( FontFamily::GenericMonospace,8 ), gcnew SolidBrush( Color::Black ), 2, 20 );
      for ( int i = 0; i < resource_strings->Length; i++ )
      {
         e->Graphics->DrawString( resource_strings[ i ], gcnew System::Drawing::Font( FontFamily::GenericMonospace,8 ), gcnew 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 ref class ResourceTestControlDesigner: public System::Windows::Forms::Design::ControlDesigner
{
public:
   ResourceTestControlDesigner(){}

   property System::ComponentModel::Design::DesignerVerbCollection^ Verbs 
   {
      virtual System::ComponentModel::Design::DesignerVerbCollection^ get() override
      {
         // Creates a collection of designer verb menu commands
         // that link to event handlers in this designer.
         array<DesignerVerb^>^temp0 = {gcnew DesignerVerb( "Load Strings from Default Resources File",gcnew EventHandler( this, &ResourceTestControlDesigner::LoadResources ) ),gcnew DesignerVerb( "Create Default Resources File",gcnew EventHandler( this, &ResourceTestControlDesigner::CreateResources ) ),gcnew DesignerVerb( "Clear ResourceTestControl String List",gcnew EventHandler( this, &ResourceTestControlDesigner::ClearStrings ) )};
         return gcnew DesignerVerbCollection( temp0 );
      }
   }

private:

   // Sets the string list for the control to the strings
   // loaded from a resource file.
   void LoadResources( Object^ /*sender*/, EventArgs^ /*e*/ )
   {
      IResourceService^ rs = dynamic_cast<IResourceService^>(this->Component->Site->GetService( IResourceService::typeid ));
      if ( rs == nullptr )
            throw gcnew System::Exception( "Could not obtain IResourceService." );

      IResourceReader^ rr = rs->GetResourceReader( CultureInfo::CurrentUICulture );
      if ( rr == nullptr )
            throw gcnew System::Exception( "Resource file could not be obtained. You may need to create one first." );

      IDictionaryEnumerator^ de = rr->GetEnumerator();
      if ( this->Control->GetType() == ResourceTestControl::typeid )
      {
         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();
         array<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( IResourceService::typeid ));
      if ( rs == nullptr )
            throw gcnew System::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.
   void ClearStrings( Object^ /*sender*/, EventArgs^ /*e*/ )
   {
      if ( this->Control->GetType() == ResourceTestControl::typeid )
      {
         ResourceTestControl^ rtc = dynamic_cast<ResourceTestControl^>(this->Control);
         array<String^>^temp = {"Test String #1","Test String #2"};
         rtc->resource_strings = temp;
         this->Control->Refresh();
      }
   }
};
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();
            }
        }
    }
}
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

Remarks

A resource writer or resource reader can be used to serialize or deserialize objects or data according to the specified CultureInfo resource settings.

Methods

GetResourceReader(CultureInfo)

Locates the resource reader for the specified culture and returns it.

GetResourceWriter(CultureInfo)

Locates the resource writer for the specified culture and returns it.

Applies to

See also