C#使用自定义函数扩展属性

时间:2019-04-30 13:15:06

标签: c#

我如何扩展所有控件的.text和.caption属性。我想创建一个多语言应用程序,以便从自定义文件中加载文本。

我想这样做:

button1.Text.LoadLocalizedText()
label1.Caption.LoadLocalizedText()

现在,我需要以下文本结果,以获取正确的文本。 我需要将“ class.button1.Text”作为字符串,并将标签“ class.label1.Caption”作为字符串。

加载自定义文本后,必须将文本动态设置为“源”属性,例如文本或标题。

我希望有人能帮助我。 谢谢。

2 个答案:

答案 0 :(得分:1)

如果要编写一种可以在所有控件上调用的方法,请为控件编写扩展方法(请参阅@ Adriani6的答案)

public static void LoadLocalizedText(this Control ctrl) {...}

如果要加载按区域性本地化的资源,则应使用资源文件并为每种区域性创建文件。 创建2个资源文件,例如Resource1.resxResource1.de.resx,然后将相应的值保存到资源文件中。 然后,您可以像这样加载资源

[ProjectNamespace.]Resources.Resource1.ResourceManager.GetString("myResource");

或者,或者通过重载自行指定文化

Resources.Resource1.ResourceManager.GetString("myResource", System.Globalization.CultureInfo.GetCultureInfo("de"));

See Microsoft Docs

答案 1 :(得分:0)

如果这是WinForms,则可以为Control类编写扩展方法。

public static class LocalizationExtension
{
    public static void LoadLocalizedText(this Control ctrl)
    {
        ctrl.Text = "My loaded string";
    }

}

通过这种方式,您可以定位从Control继承的所有控件,例如Button和Label。

您只需使用Button.LoadLocalizedText()Label.LocdLocalizedText()等来调用它。