【发布时间】:2020-09-12 18:38:38
【问题描述】:
我制作了自定义控件并添加了一个新属性,该属性旨在指向一个资源。
如何从自定义控件的另一个属性中获取在表单设计器中设置的该属性的值?
当我尝试读取它时,它返回的值是null。
我的代码与自定义控件和提到的属性相关:
class ResourceLabel : Label
{
private string resourceKey;
[Category("Appearance")]
[Browsable(true)]
[Description("Sets the resource key for localization")]
public string ResourceKey
{
get { return resourceKey; }
set {
if (resourceKey != value) {
resourceKey = value;
Invalidate();
}
}
}
[Browsable(true)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
[EditorBrowsable(EditorBrowsableState.Always)]
[Bindable(true)]
public override string Text
{
if (base.Text != value) {
Console.WriteLine($"Test: {ResourceKey}");
if (ResourceKey != null) {
var locale = CultureInfo.GetCultureInfo(Properties.Settings.Default.Language);
var textFromResource = Resources.ResourceManager.GetString(ResourceKey, locale);
base.Text = textFromResource;
}
else {
base.Text = value;
}
}
}
}
这个字符串Console.WriteLine($"Test: {ResourceKey}"); 返回null。
【问题讨论】:
-
Hans 的建议很有趣,但这里的重点(至少我要说明的一点)是,你很可能不需要这个财产。当您使用
LocalizableDesigner 属性本地化您的应用程序时,将为您在 PropertyGrid 中选择的每种语言生成一个新的.resx文件。因此,您实际上不需要从资源中选择 值:当 CurrentCulture 更改(Thread.CurrentThread.CurrentCulture和Thread.CurrentThread.CurrentUICulture更改)时,这会自动完成。先看看这些功能。 -
您可以选择Change language at runtime in C# winform 或How to make multi-language app in Winforms?。我个人建议做的事情非常清楚。
-
Change language at runtime in C# winform 它在运行时工作。非常感谢!
-
这是一个选择。请注意,此处显示的方法不完整,不包括组件(和准组件)。外部调试器-可视化器可能发疯(或其他您目前可能不感兴趣的东西)
标签: c# .net winforms resources custom-controls