如何创建可本地化的UserControl?

时间:2014-05-27 23:34:47

标签: c# .net vb.net

为简单起见,我有一个带有标签的UserControl,我希望标签文本可以本地化。 在UserControl中,我创建了一个公共LabelText属性来获取/设置标签文本。

这是我的UserControl的代码

Imports System.ComponentModel

Public Class ctlA

    <Browsable(True), _
    EditorBrowsable(EditorBrowsableState.Always), _
    Localizable(True), _
    DefaultValue("dafaultLabel"), _
    DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> _
    Private _LabelText As String = "label"
    Public Property LabelText() As String
        Get
            Return _LabelText
        End Get
        Set(ByVal value As String)
            _LabelText = value
            Label1.Text = value
        End Set
    End Property
End Class

我可以将UserControl插入到表单中,但是当我为表单选择不同的语言时,我无法本地化LabelText属性。

我该怎么做才能使LabelText属性可以本地化?

2 个答案:

答案 0 :(得分:0)

您以与本地化表单完全相同的方式本地化UserControl。您将Localizable属性设置为true,并指定一种语言。本地化在运行时发生。该过程的演练可用here

至于使自定义属性可以本地化,您已经通过在其定义中添加Localizable属性来做正确的事情。

这里的问题是表单上的UserControl被单独处理容器表单。它不会继承表单的本地化设置,您必须单独设置UserControl。

答案 1 :(得分:0)

我会在经过数小时的反复试验后回答我的问题。

  1. 仅需要Localizable属性。
  2. 私有财产字段的声明应该高于属性。
  3. 支持UserControl本地化的工作代码是:

    Imports System.ComponentModel
    
    Public Class ctlA
    
        Private _LabelText As String = "label"
        <Localizable(True)>
        Public Property LabelText() As String
            Get
                Return _LabelText
            End Get
            Set(ByVal value As String)
                _LabelText = value
                Label1.Text = value
            End Set
        End Property
    End Class