// Set form caption from string resource
this.Text = (string)resman.GetObject("MyString"); // The hard way
this.Text = resman.GetString("MyString"); // The easy way
}
用来查找 .resources 文件的命名方式与命名任何其他种类的资源相同(注意追加到 Resource1.resources 文件中的项目默认命名空间的使用方法),只是 .resources 扩展名是假定的,并且不能包括在名称中。为了更方便,如果您碰巧将一个 .resx 文件命名为类型名称,则 .resources 文件和程序集的名称将从类型确定:
// Use the type to determine resource name and assembly
ResourceManager resman = new ResourceManager(this.GetType());
一旦已经创建了资源管理器的实例,就可以通过使用 GetObject 方法并强制转换为合适的类型,从而按名称找到嵌套资源。如果使用 .resx 文件来处理字符串资源,则可以使用 GetString 方法,该方法将执行到 System.String 类型的强制转换。
返回页首
设计器资源
缺少用于 .resx 文件的合适的编辑器使它们在使用除字符串资源以外的任何其他资源时非常困难。您不仅必须通过手动编写代码才能在运行时输入数据,而且无法在设计时看见资源的使用情况;例如,窗体的背景图像。
幸运的是,设计器再次在这里帮助了我们。如果打开 Visual Studio .NET Solution Explorer,并选择 Show All Files 按钮,您将看见每个组件(无论它是窗体、控件还是简单的组件)都有相应的 .resx 文件。这是为了让资源与组件的属性保持关联,这种关联是在 Property Browser 中设置的。例如,如果设置窗体的 BackgroundImage 属性,那么不仅在设计器中窗体将显示背景图像,而且窗体的 .resx 文件将包含该图像的对应项。同样,如果在相同窗体上设置 PictureBox 控件的 Image 属性,则 .resx 文件同样会增大以便包括该资源。这两项都可以在图 7 中看到。
图 7. 组件的 .resx 文件
每个组件的 .resx 文件将作为 .resources 文件进行编译和嵌入,就像已经将您自己的 .resx 文件添加到项目中一样,这将使资源能够在运行时被组件使用。除了组件的 .resx 文件中的项之外,设计器还会将代码添加到 InitializeComponent 中,以便加载组件的资源管理器,并使用从资源获得的对象来填充组件的属性:
namespace ResourcesApp {
public class Form1 : Form {
...
private void InitializeComponent() {
ResourceManager resources = new ResourceManager(typeof(Form1));
...
this.pictureBox1.Image =
(System.Drawing.Bitmap)resources.GetObject("pictureBox1.Image");
...
this.BackgroundImage =
(System.Drawing.Bitmap)resources.GetObject("$this.BackgroundImage");
...
}
}
}
注意 ResourceManager 对象是使用组件的类型来构造的,该类型用来构造组件的 .resources 资源名称。还要注意设计器在命名资源时所使用的命名约定。对于组件字段上的属性,名称的格式是:
<fieldName>.<propertyName>
对于组件本身的属性,名称格式是:
$this.<propertyName>
如果您想添加供组件本身使用的自定义字符串属性,您可以这样做,但要确保与设计器生成的名称格式不同。
返回页首
我们所处的位置
Microsoft .NET 框架支持两种资源 — 无类型清单资源和有类型资源。通过将文件的 Build Action 设置为 Embedded Resource,可以让 Visual Studio .NET 支持无类型清单资源,并通过 .resx 文件(可以是自定义文件或作为组件资源的备份存储)支持有类型资源。清单资源的好处是,它们可在 IDE 中直接编辑,而有类型资源需要做特别的工作才能编辑,但可提供有类型访问。两种资源类型都有某些严格的命名要求,所以在编写方法调用来加载它们时要格外小心。
注 该材料摘自即将发表的 Addison-Wesley 标题:Windows Forms Programming in C#,作者是 Chris Sells (0321116208)。请注意,这里提供的材料是将要出版的书籍中的一部分初始草稿。
Chris Sells 是独立顾问、演讲人和作者,他专门研究 .NET 和 COM 中的分布式应用程序。他已经编写了几部书,目前正在编写 Windows Forms for C# and VB.NET Programmers 和 Mastering Visual Studio .NET。业余时间,Chris 主持各种会议,指导 Genghis 可用源项目,并和 Rotor 交流,通常他会参加 Microsoft 设计审查会议。有关 Chris 及其各种项目的详细信息,可从站点 http://www.sellsbrothers.com 获得。
文章来源于领测软件测试网 https://www.ltesting.net/