0

总而言之,我正在本地化我的 C# 应用程序,并且我已经进入了我的设置控制。当我使用 aPropertyGrid时,我正在使用属性来提供选项。我有一个CategoryAttribute“服务器访问”,我需要用不同的语言显示 - 我有:

[CategoryAttribute("ServerAccess"),
 ReadOnlyAttribute(false),
 XmlElement,
 DescriptionAttribute("Message about the Server Access Option.")]
public bool ShowSystemDatabases 
{
    get { return this.showSystemDatabases; }
    set { this.showSystemDatabases = value; }
}

我试图将其更改为:

[CategoryAttribute(ObjectStrings.SettingsServerAccess),
 ReadOnlyAttribute(false),
 XmlElement,
 DescriptionAttribute(MessageStrings.SettingsShowSystemDatabaseInfo)]
public bool ShowSystemDatabases 
{
    get { return this.showSystemDatabases; }
    set { this.showSystemDatabases = value; }
}

我的资源文件在哪里ObjectStrings('ObjectStrings.resx' 等)。这会引发编译时错误

An attribute argument must be a constant expression, typeof expression or array 
creation expression of an attribute parameter type...

显然,当构造函数需要一个const string. 我尝试过从使用各种绕行方法进行转换stringconst string但都失败了。这是一个很简单的问题,但是...

解决这个问题的最简单方法是什么?

谢谢你的时间。

4

1 回答 1

1

我不知道你如何处理这个问题,特别是在控件属性的情况下,但实现这一点的一般方法是在运行时解析资源,在你的属性上使用如下参数:

MessageResourceType = typeof (MyResource), MessageResourceName = "MyResourceKey")

而不是直接将指针传递给资源键。

不知道CategoryAttribute、DescriptionAttribute和其他控件的properties属性是否有等效的方法,或者是否有方法可以重载它们。

于 2013-03-21T16:32:23.857 回答