Export (0) Print
Expand All

LocalizationExtenderProvider Class

Provides design-time support for localization features to a root designer.

For a list of all members of this type, see LocalizationExtenderProvider Members.

System.Object
   System.ComponentModel.Design.LocalizationExtenderProvider

[Visual Basic]
Public Class LocalizationExtenderProvider
   Implements IExtenderProvider, IDisposable
[C#]
public class LocalizationExtenderProvider : IExtenderProvider,
   IDisposable
[C++]
public __gc class LocalizationExtenderProvider : public
   IExtenderProvider, IDisposable
[JScript]
public class LocalizationExtenderProvider implements
   IExtenderProvider, IDisposable

Thread Safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Remarks

LocalizationExtenderProvider can extend an IRootDesigner with a set of properties and methods that provide support for the .NET Framework localization architecture. For more about using resources, see the Localization topic.

The localization support architecture enables designers to initialize component properties using resource files that can be swapped at run time to support a variety of languages, culture-specific styles and dynamically configurable features. You can use the methods of this class to enable designers and code generating serializers to load from resources and build initialization code that uses localization features.

The default serializers that ship with Visual Studio .NET are already capable of localizing components and controls, but they only do so if they locate support for the .NET Framework localization architecture. To detect the presence of localization support, the serialization system must locate a public Boolean property named Localizable on the root designer component. If a serializer finds this property, it searches for a property of type CultureInfo named "Language" to determine the current resouce configuration. Default serializers use these properties to determine if it should localize any localizable resources of the component, and if so, what CultureInfo format the resource information should be saved in.

Example

[Visual Basic, C#, C++] The following code example adds a LocalizationExtenderProvider to a component.

[Visual Basic] 
' Adds a LocalizationExtenderProvider that provides localization support properties to the specified component.
extender = New LocalizationExtenderProvider(Me.component_.Site, Me.component_)

[C#] 
// Adds a LocalizationExtenderProvider that provides localization support properties to the specified component.
extender = new LocalizationExtenderProvider(this.component.Site, this.component);

[C++] 
// Adds a LocalizationExtenderProvider that provides localization support properties to the specified component.
extender = new LocalizationExtenderProvider(this->component->Site, this->component);

The following code example includes an example component and designer. The designer uses a LocalizationExtenderProvider to add localization support properties for the component.

[Visual Basic] 
Imports System
Imports System.Collections
Imports System.ComponentModel
Imports System.ComponentModel.Design
Imports System.Diagnostics
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Windows.Forms.Design

' This example demonstrates adding localization support to a component heirarchy from a 
' custom IRootDesigner using the LocalizationExtenderProvider class.

' RootViewDesignerComponent is a component associated with the SampleRootDesigner
' IRootDesigner that provides LocalizationExtenderProvider localization support.
' This derived class is included at the top of this example to enable 
' easy launching of designer view without having to put the class in its own file.
Public Class RootViewDesignerComponent
    Inherits RootDesignedComponent

    Public Sub New()
    End Sub
End Class

' The following attribute associates the RootDesignedComponent with the RootDesignedComponent component.
<Designer(GetType(SampleRootDesigner), GetType(IRootDesigner))> _
Public Class RootDesignedComponent
    Inherits Component

    Public Sub New()
    End Sub
End Class

' Example IRootDesigner implementation demonstrates LocalizationExtenderProvider support.
Friend Class SampleRootDesigner
    Implements IRootDesigner

    ' RootDesignerView Control provides a full region designer view for this root designer's associated component.
    Private m_view As RootDesignerView
    ' Stores reference to the LocalizationExtenderProvider this designer adds, in order to remove it on Dispose.
    Private extender As LocalizationExtenderProvider
    ' Internally stores the IDesigner's component reference
    Private component_ As IComponent

    ' Adds a LocalizationExtenderProvider for the component this designer is initialized to support.
    Public Sub Initialize(ByVal component As System.ComponentModel.IComponent) Implements IRootDesigner.Initialize
        Me.component_ = component

        ' If no extender from this designer is active...
        If extender Is Nothing Then
            ' Adds a LocalizationExtenderProvider that provides localization support properties to the specified component.
            extender = New LocalizationExtenderProvider(Me.component_.Site, Me.component_)
        End If
    End Sub

    ' Provides a RootDesignerView object that supports ViewTechnology.WindowsForms.
    Function GetView(ByVal technology As ViewTechnology) As Object Implements IRootDesigner.GetView

        If technology <> ViewTechnology.WindowsForms Then
            Throw New ArgumentException("Not a supported view technology", "technology")
        End If
        If m_view Is Nothing Then
            ' Create the view control. In this example, a Control of type RootDesignerView is used.
            ' A WindowsForms ViewTechnology view provider requires a class that inherits from Control.
            m_view = New RootDesignerView(Me, Me.Component)
        End If
        Return m_view

    End Function

    ' This designer supports the WindowsForms view technology.
    ReadOnly Property SupportedTechnologies() As ViewTechnology() Implements IRootDesigner.SupportedTechnologies
        Get
            Return New ViewTechnology() {ViewTechnology.WindowsForms}
        End Get
    End Property

    ' If a LocalizationExtenderProvider has been added, removes the extender provider.
    Protected Overloads Sub Dispose(ByVal disposing As Boolean)
        ' If an extender has been added, remove it
        If Not (extender Is Nothing) Then
            ' Disposes of the extender provider.  The extender 
            ' provider removes itself from the extender provider
            ' service when it is disposed.
            extender.Dispose()
            extender = Nothing
        End If
    End Sub

    ' Empty IDesigner interface property and method implementations
    Public ReadOnly Property Verbs() As System.ComponentModel.Design.DesignerVerbCollection Implements IDesigner.Verbs
        Get
            Return Nothing
        End Get
    End Property

    Public ReadOnly Property Component() As System.ComponentModel.IComponent Implements IRootDesigner.Component
        Get
            Return Me.component_
        End Get
    End Property

    Public Sub DoDefaultAction() Implements IDesigner.DoDefaultAction
    End Sub

    Public Overloads Sub Dispose() Implements IDisposable.Dispose
    End Sub

    ' RootDesignerView is a simple control that will be displayed in the designer window.
    Private Class RootDesignerView
        Inherits Control
        Private m_designer As SampleRootDesigner
        Private comp As IComponent

        Public Sub New(ByVal designer As SampleRootDesigner, ByVal component As IComponent)
            m_designer = designer
            Me.comp = component
            BackColor = Color.Blue
            Font = New Font(FontFamily.GenericMonospace, 12)
        End Sub

        ' Displays the name of the component and the name of the assembly of the component 
        ' that this root designer is providing support for.
        Protected Overrides Sub OnPaint(ByVal pe As PaintEventArgs)
            MyBase.OnPaint(pe)

            If Not (m_designer Is Nothing) AndAlso Not (comp Is Nothing) Then
                ' Draws the name of the component in large letters.
                pe.Graphics.DrawString("Root Designer View", Font, Brushes.Yellow, 8, 4)
                pe.Graphics.DrawString("Design Name  : " + comp.Site.Name, New Font("Arial", 10), Brushes.Yellow, 8, 28)
                
                ' Uses the site of the component to acquire an ISelectionService and sets the property grid focus to the component.
                Dim selectionService As ISelectionService = CType(comp.Site.GetService(GetType(ISelectionService)), ISelectionService)
                If Not (selectionService Is Nothing) Then
                    selectionService.SetSelectedComponents(New IComponent() {m_designer.Component})
                End If
            End If
        End Sub
    End Class

End Class

[C#] 
using System;
using System.Collections;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Diagnostics;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.Design;

// This example demonstrates adding localization support to a component heirarchy from a 
// custom IRootDesigner using the LocalizationExtenderProvider class.
namespace LocalizationExtenderProviderExample
{    
    // RootViewDesignerComponent is a component associated with the SampleRootDesigner
    // IRootDesigner that provides LocalizationExtenderProvider localization support.
    // This derived class is included at the top of this example to enable 
    // easy launching of designer view without having to put the class in its own file.
    public class RootViewDesignerComponent : RootDesignedComponent
    {  
        public RootViewDesignerComponent()
        {            
        }
    }

    // The following attribute associates the RootDesignedComponent with the RootDesignedComponent component.
    [Designer(typeof(SampleRootDesigner), typeof(IRootDesigner))]
    public class RootDesignedComponent : Component
    {
        public RootDesignedComponent()
        {
        }    
    }

    // Example IRootDesigner implementation demonstrates LocalizationExtenderProvider support.
    internal class SampleRootDesigner : IRootDesigner
    {
        // RootDesignerView Control provides a full region designer view for this root designer's associated component.
        private RootDesignerView m_view;            
        // Stores reference to the LocalizationExtenderProvider this designer adds, in order to remove it on Dispose.
        private LocalizationExtenderProvider extender;        
        // Internally stores the IDesigner's component reference
        private IComponent component;                
        
        // Adds a LocalizationExtenderProvider for the component this designer is initialized to support.
        public void Initialize(System.ComponentModel.IComponent component)
        {
           this.component = component;
            
            // If no extender from this designer is active...
            if( extender == null )
            {
                // Adds a LocalizationExtenderProvider that provides localization support properties to the specified component.
                extender = new LocalizationExtenderProvider(this.component.Site, this.component);
            }
        }

        // Provides a RootDesignerView object that supports ViewTechnology.WindowsForms.
        object IRootDesigner.GetView(ViewTechnology technology) 
        {
            if (technology != ViewTechnology.WindowsForms)
            {
                throw new ArgumentException("Not a supported view technology", "technology");
            }
            if (m_view == null )
            {
                // Create the view control. In this example, a Control of type RootDesignerView is used.
                // A WindowsForms ViewTechnology view provider requires a class that inherits from Control.
                m_view = new RootDesignerView(this, this.Component);
            }
            return m_view;
        }

        // This designer supports the WindowsForms view technology.
        ViewTechnology[] IRootDesigner.SupportedTechnologies 
        {
            get
            {
                return new ViewTechnology[] {ViewTechnology.WindowsForms};
            }
        }
        
        // If a LocalizationExtenderProvider has been added, removes the extender provider.
        protected void Dispose(bool disposing)
        {            
            // If an extender has been added, remove it
            if( extender != null  )  
            {
                // Disposes of the extender provider.  The extender 
                // provider removes itself from the extender provider
                // service when it is disposed.
                extender.Dispose();
                extender = null;                
            }            
        }

        // Empty IDesigner interface property and method implementations
        public System.ComponentModel.Design.DesignerVerbCollection Verbs
        {
            get
            {
                return null;
            }
        }

        public System.ComponentModel.IComponent Component
        {
            get
            {
                return this.component;
            }
        }

        public void DoDefaultAction()
        {            
        }

        public void Dispose()
        {        
        }
        
        // RootDesignerView is a simple control that will be displayed in the designer window.
        private class RootDesignerView : Control
        {
            private SampleRootDesigner m_designer;   
            private IComponent comp;
            
            public RootDesignerView(SampleRootDesigner designer, IComponent component)
            {
                m_designer = designer;                        
                this.comp = component;      
                BackColor = Color.Blue;
                Font = new Font(FontFamily.GenericMonospace, 12);
            }

            // Displays the name of the component and the name of the assembly of the component 
            // that this root designer is providing support for.
            protected override void OnPaint(PaintEventArgs pe)
            {
                base.OnPaint(pe);

                if( m_designer != null && comp != null )
                {
                    // Draws the name of the component in large letters.
                    pe.Graphics.DrawString("Root Designer View", Font, Brushes.Yellow, 8, 4);                    
                    pe.Graphics.DrawString("Design Name  : "+comp.Site.Name, new Font("Arial", 10), Brushes.Yellow, 8, 28);                    
                    pe.Graphics.DrawString("Assembly    : "+comp.GetType().AssemblyQualifiedName, new Font("Arial", 10), Brushes.Yellow, new Rectangle(new Point(8, 44), new Size(ClientRectangle.Width-8, ClientRectangle.Height-44)));                   

                    // Uses the site of the component to acquire an ISelectionService and sets the property grid focus to the component.
                    ISelectionService selectionService = (ISelectionService)comp.Site.GetService(typeof(ISelectionService));
                    if( selectionService != null )                
                        selectionService.SetSelectedComponents( new IComponent[] { m_designer.component } );             
                }
            }
        }
    }
}

[C++] 
#using <mscorlib.dll>
#using <system.dll>
#using <system.design.dll>
#using <system.windows.forms.dll>
#using <system.drawing.dll>

using namespace System;
using namespace System::Collections;
using namespace System::ComponentModel;
using namespace System::ComponentModel::Design;
using namespace System::Diagnostics;
using namespace System::Drawing;
using namespace System::Windows::Forms;
using namespace System::Windows::Forms::Design;

// This example demonstrates adding localization support to a component heirarchy from a
// custom IRootDesigner using the LocalizationExtenderProvider class.
namespace LocalizationExtenderProviderExample
{
    // Example IRootDesigner implementation demonstrates LocalizationExtenderProvider support.
    private __gc class SampleRootDesigner : public IRootDesigner {
    private:

        // RootDesignerView is a simple control that will be displayed in the designer window.
        __gc class RootDesignerView : public Control {
        private:

            SampleRootDesigner* m_designer;
            IComponent* comp;

        public:

            RootDesignerView(SampleRootDesigner* designer, IComponent* component)
            {
                m_designer = designer;
                this->comp = component;
                BackColor = Color::Blue;
                Font = new System::Drawing::Font(FontFamily::GenericMonospace, 12);
            }

        protected:

            // Displays the name of the component and the name of the assembly of the component
            // that this root designer is providing support for.
            void OnPaint(PaintEventArgs* pe)
            {
                Control::OnPaint(pe);

                if( m_designer != 0 && comp != 0 )
                {
                    // Draws the name of the component in large letters.
                    pe->Graphics->DrawString(S"Root Designer View", Font, Brushes::Yellow, 8, 4);
                    pe->Graphics->DrawString(String::Concat( S"Design Name  : ",comp->Site->Name ),
                        new System::Drawing::Font(S"Arial", 10), Brushes::Yellow, 8, 28);
                    pe->Graphics->DrawString(String::Concat( S"Assembly    : ", comp->GetType()->AssemblyQualifiedName ),
                        new System::Drawing::Font(S"Arial", 10), Brushes::Yellow, System::Drawing::RectangleF(System::Drawing::Point(8, 44),
                            System::Drawing::Size(ClientRectangle.Width-8, ClientRectangle.Height-44)));

                    // Uses the site of the component to acquire an ISelectionService and sets the property grid focus to the component.
                    ISelectionService* selectionService = dynamic_cast<ISelectionService*>(comp->Site->GetService(__typeof(ISelectionService)));
                    if( selectionService != 0 ) {
                        IComponent* myArray[] = { m_designer->component };
                        selectionService->SetSelectedComponents( static_cast<Array*>(myArray) );
                    }
                }
            }
        };

        // RootDesignerView Control provides a full region designer view for this root designer's associated component.
        RootDesignerView* m_view;
        // Stores reference to the LocalizationExtenderProvider this designer adds, in order to remove it on Dispose.
        LocalizationExtenderProvider* extender;
        // Internally stores the IDesigner's component reference
        IComponent* component;

        // Provides a RootDesignerView object that supports ViewTechnology.WindowsForms.
        Object* IRootDesigner::GetView(ViewTechnology technology)
        {
            if (technology != ViewTechnology::WindowsForms)
            {
                throw new ArgumentException(S"Not a supported view technology", "technology");
            }
            if (m_view == 0)
            {
                // Create the view control. In this example, a Control of type RootDesignerView is used.
                // A WindowsForms ViewTechnology view provider requires a class that inherits from Control.
                m_view = new RootDesignerView(this, this->Component);
            }
            return m_view;
        }

        // This designer supports the WindowsForms view technology.
        __property ViewTechnology IRootDesigner::get_SupportedTechnologies() []
        {
            ViewTechnology myArray[] = {ViewTechnology::WindowsForms};
            return myArray;
        }

    public:

        // Adds a LocalizationExtenderProvider for the component this designer is initialized to support.
        void Initialize(IComponent* component)
        {
           this->component = component;

            // If no extender from this designer is active...
            if( extender == 0 )
            {
                // Adds a LocalizationExtenderProvider that provides localization support properties to the specified component.
                extender = new LocalizationExtenderProvider(this->component->Site, this->component);
            }
        }

        // Empty IDesigner interface property and method implementations
        __property DesignerVerbCollection* get_Verbs()
        {
            return 0;
        }

        __property IComponent* get_Component()
        {
            return this->component;
        }

        void DoDefaultAction()
        {
        }

        void Dispose()
        {
        }

    protected:

        // If a LocalizationExtenderProvider has been added, removes the extender provider.
        void Dispose(bool disposing)
        {
            // If an extender has been added, remove it
            if( extender != 0 )
            {
                // Disposes of the extender provider.  The extender
                // provider removes itself from the extender provider
                // service when it is disposed.
                extender->Dispose();
                extender = 0;
            }
        }
    };

    // The following attribute associates the RootDesignedComponent with the RootDesignedComponent component.
    [Designer(__typeof(SampleRootDesigner), __typeof(IRootDesigner))]
    public __gc class RootDesignedComponent : public Component {
    public:

        RootDesignedComponent()
        {
        }
    };

    // RootViewDesignerComponent is a component associated with the SampleRootDesigner
    // IRootDesigner that provides LocalizationExtenderProvider localization support.
    // This derived class is included at the top of this example to enable
    // easy launching of designer view without having to put the class in its own file.
    public __gc class RootViewDesignerComponent : public RootDesignedComponent {
    public:

        RootViewDesignerComponent()
        {
        }
    };
}

[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.Design (in System.Design.dll)

See Also

LocalizationExtenderProvider Members | System.ComponentModel.Design Namespace

Show:
© 2014 Microsoft