C# 使用资源文件 Resource.resx 的方法

本文介绍如何使用.resx资源文件来管理程序中的图标、图片和声音等资源,通过创建ResourceFile.resx文件并添加资源,可以在C#代码中方便地引用这些资源。
在写程序时, 可以把用到的 图标,图片,声音等外部资源,放在一个 .resx (资源文件)中. 这样的好处是不用考虑什么路径的问题.而且还对资源有保护的做用.
1.创建一个 ResourceFile.resx 文件. (ResourceFile 可以为自定义的任意名称)
2.向ResourceFile.resx 里添加资源文件 .
3.可以直接在C# 文件中这样使用:
  比如:主窗体的图标:
    this.Icon = (Icon)(ResouceFile.ResourceManager.GetObject("资料的名称无后缀"));


<think>我们正在处理一个C# WinForms项目,目的是添加一个.en.resx资源文件以支持英文语言设置。 根据引用[4]的内容,我们知道在C#中实现国际化需要资源文件,例如英文资源文件(如Resource.en-US.resx)和中文资源文件(如Resource.zh-CN.resx)。这些资源文件中的ID相同,但值对应不同的语言。 步骤: 1. 在解决方案资源管理器中,右键单击你的项目(或特定的文件夹,比如Properties),选择“添加”->“新建项”。 2. 在“添加新项”对话框中,选择“资源文件”,并命名为你想要的名称,例如“Resource.en.resx”或“Resource.en-US.resx”(注意:通常使用区域文化代码,如en-US)。 3. 点击“添加”按钮,这样就会创建并打开资源文件。 4.资源文件中,添加键值对,例如:键为“WelcomeMessage”,值为“Welcome”等。 注意:通常我们会有一个默认的资源文件(比如Resource.resx),它会在找不到特定语言资源时使用。然后我们为每种语言创建对应的资源文件,命名规则为:基本名称.语言文化代码.resx。 例如: - Resource.resx(默认,比如英文) - Resource.fr-FR.resx(法语) - Resource.zh-CN.resx(简体中文) 因此,如果你要添加英文资源文件,且你的默认资源已经是英文,那么你可能不需要再添加一个英文资源文件(除非是不同地区的英文,如en-GB)。但如果你需要为特定地区(如美国)的英文单独设置,则可以添加Resource.en-US.resx。 操作步骤(详细): 1. 打开你的WinForms项目。 2. 在解决方案资源管理器中,找到你要添加资源文件文件夹(通常是项目的Properties文件夹,或者你自己创建一个Resources文件夹,但通常放在Properties中)。 3. 右键单击Properties文件夹(如果没有,可以右键单击项目,选择“添加”->“新建文件夹”,命名为Properties,然后将资源文件放在面),选择“添加”->“新建项”。 4. 在“添加新项”对话框中,选择“资源文件”,在名称框中输入“Resource.en-US.resx”(注意:这我们使用en-US代表美国英语)。 5. 点击“添加”按钮。 现在,你可以在资源编辑器中添加字符串、图像等资源。例如,在字符串资源表中,添加名称(Name)和值(Value)。注意,名称必须与默认资源文件Resource.resx)中的名称一致。 然后,在代码中,你可以通过资源管理器来访问这些资源。例如,使用`Properties.Resources.ResourceManager`来获取特定文化的资源。 例如,设置当前线程的文化: ```csharp System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US"); ``` 然后,当你访问资源时,会自动加载对应语言的资源。 示例代码: ```csharp string welcomeMessage = Properties.Resources.WelcomeMessage; // 根据当前UI文化获取相应的字符串 ``` 注意:如果你的资源文件不在Properties文件夹中,而是放在其他地方,那么你可能需要自定义资源管理器的访问方式。 另外,引用[1]提到,如果你要添加另一种语言(比如Latino),你需要为每个窗体创建.resx文件。但是,这我们使用的是全局资源文件(即一个项目一个资源文件),而不是每个窗体一个资源文件。在WinForms中,你也可以为每个窗体创建本地化资源文件,这通常是通过设置窗体的Localizable属性为true,然后设置Language属性,这样会自动生成对应的资源文件。但根据问题,我们这讨论的是添加全局资源文件。 因此,总结一下: - 添加一个全局资源文件Resource.en-US.resx,并添加所需的字符串。 - 在代码中设置当前线程的CurrentUICulture,然后使用ResourceManager获取字符串。 相关问题: 1. 如何为WinForms中的特定窗体创建本地化资源文件? 2.C#中如何动态切换语言而不重启应用程序? 3. 资源文件在编译后是如何处理的?它们会被嵌入到程序集中吗?</think>### 在 C# WinForms 中添加 .en.resx 资源文件方法C# WinForms 项目中添加英文资源文件的步骤如下: #### 1. **创建资源文件** - 在解决方案资源管理器中右键单击项目 - 选择"添加" → "新建项" - 在搜索框中输入"资源文件",选择"资源文件(.resx)" - 命名文件为 `Resource.en.resx`(或 `Resource.en-US.resx` 遵循区域性命名规范) - 点击"添加" #### 2. **编辑资源内容** - 打开新创建的 `.resx` 文件 - 在资源编辑器中添加键值对: ``` | 名称 (Name) | 值 (Value) | |-------------|------------| | Welcome | Welcome | | Save | Save | | Cancel | Cancel | ``` - 确保键名与默认资源文件(如 `Resource.resx`)完全一致 #### 3. **设置文件属性** - 右键单击资源文件 → "属性" - 确保: - **生成操作** = `嵌入的资源` - **自定义工具** = `ResXFileCodeGenerator` - **复制到输出目录** = `不复制` #### 4. **访问资源的代码实现** ```csharp using System.Globalization; using System.Threading; // 设置当前语言环境 Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US"); // 获取资源字符串 string welcomeText = Properties.Resources.Welcome; ``` #### 5. **语言切换逻辑** ```csharp public static void SetLanguage(string cultureCode) { Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureCode); // 刷新所有打开的表单 foreach (Form form in Application.OpenForms) { ApplyResources(form, new ComponentResourceManager(form.GetType())); } } private static void ApplyResources(Control control, ComponentResourceManager resources) { resources.ApplyResources(control, control.Name); foreach (Control child in control.Controls) { ApplyResources(child, resources); } } ``` #### 关键注意事项: 1. 资源文件命名应遵循 `[基名].[区域性].resx` 格式,例如: - `Resource.resx`(默认/后备资源) - `Resource.en.resx`(英语) - `Resource.fr.resx`(法语) 2. 资源文件层级: - 全局资源:存储在 `Properties/Resources.resx` - 窗体级资源:当窗体 `Localizable` 属性设为 `true` 时自动生成 3. 编译后行为: - 资源文件会被编译成附属程序集(satellite assemblies) - 按 `[应用目录]/[区域性]` 文件夹结构存储(如 `bin/en/App.resources.dll`) [^1]: 国际化实现需要为每种语言创建资源文件并编译为独立 DLL [^4]: 资源文件中的 ID 必须保持一致,仅展示值随语言变化
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值