IResourceService Интерфейс

Определение

Предоставляет конструкторам интерфейс для получения доступа к устройствам чтения и записи ресурсов для определенных типов ресурсов класса CultureInfo.

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

Примеры

В следующем примере демонстрируется конструктор, использующий IResourceService для чтения и записи в файлы ресурсов для настройки свойства связанного элемента управления.

#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

Комментарии

Модуль записи ресурсов или средство чтения ресурсов можно использовать для сериализации или десериализации объектов или данных в соответствии с заданными CultureInfo параметрами ресурса.

Методы

GetResourceReader(CultureInfo)

Осуществляет поиск устройства чтения ресурсов для заданной культуры.

GetResourceWriter(CultureInfo)

Осуществляет поиск устройства записи ресурсов для заданной культуры.

Применяется к

См. также раздел