IResourceService Interfejs
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Udostępnia projektantom interfejs umożliwiający dostęp do czytników zasobów i składników zapisywania dla określonych CultureInfo typów zasobów.
public interface class IResourceService
public interface IResourceService
type IResourceService = interface
Public Interface IResourceService
Przykłady
W poniższym przykładzie pokazano projektanta, który używa IResourceService elementu do odczytu i zapisu do plików zasobów w celu skonfigurowania właściwości skojarzonej kontrolki.
#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
Uwagi
Moduł zapisywania zasobów lub czytnik zasobów może służyć do serializacji lub deserializacji obiektów lub danych zgodnie z określonymi CultureInfo ustawieniami zasobów.
Metody
GetResourceReader(CultureInfo) |
Lokalizuje czytnik zasobów dla określonej kultury i zwraca go. |
GetResourceWriter(CultureInfo) |
Lokalizuje składnik zapisywania zasobów dla określonej kultury i zwraca go. |