C# 界面控件中英切换

编程软件:VS 2015

需求:界面有两个按钮,点击可以将界面上所有控件进行不同语言的切换。

一共两种方案,个人认为第二种方案使用范围更广(这里以中英文切换为例)。

方案一:如图所示,建立两个资源文件

将所需控件的中英文分别填入对应的资源文件中,如下图所示:

代码如下:

        public void ApplyResource(Control control){switch (Thread.CurrentThread.CurrentCulture.Name){case "en":crm = new ComponentResourceManager(typeof(Resource.Resource_en));break;case "zh":crm = new ComponentResourceManager(typeof(Resource.Resource_zh));break;default:crm = new ComponentResourceManager(typeof(Resource.Resource_zh));break;}applyControl(control.GetType().Name, control);//调用}//递归应用到控件private void applyControl(string topName, Control control){foreach (Control ctl in control.Controls){crm.ApplyResources(ctl, topName + "." + ctl.Name, Thread.CurrentThread.CurrentCulture);if (ctl.HasChildren){applyControl(topName, ctl);}}}

创建两个按钮,分别是中文和英文,将方法引用就可以了。

        private void 中文ToolStripMenuItem_Click(object sender, EventArgs e){中文按钮是否触发 = true;英文按钮是否触发 = false;Thread.CurrentThread.CurrentCulture = new CultureInfo("zh");//中文ApplyResource(注册界面对象);//传入当前的界面}private void 英文ToolStripMenuItem_Click(object sender, EventArgs e){英文按钮是否触发 = true;中文按钮是否触发 = false;Thread.CurrentThread.CurrentCulture = new CultureInfo("en");//英文}

该方法的缺点在于:界面布局不能自适应,如果英文名和中文名长度不一致就会导致布局发生变化,控件相互遮挡的情况。

 方案二:如图所示,将界面的Language改为英语

这样的操作就有有两个注册界面,一个中文的,一个英文的,可以各自调整各自的布局。切换不同的语言,显示不同的界面(界面上的控件翻译自己来)

方案一和二完全不掺和,方案二不需要建立资源文件!

代码(可以在界面加载的时候从新定义界面大小):

这个代码适用于控件嵌套控件

        public void 英文(){this.Text = "Registration interface";this.Size = new Size(1001, 669);Thread.CurrentThread.CurrentUICulture = new CultureInfo("en"); //英文是en遍历界面控件(this);}public void 中文(){this.Text = "注册界面";this.Size = new Size(1001, 669);Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh"); //英文是en遍历界面控件(this);}private void 遍历界面控件(Control fatherControl){//结果:能获取到绝大多数控件//问题:Timer、ContextMenuStrip等控件获取不到ComponentResourceManager resources = new ComponentResourceManager(typeof(注册界面));Control.ControlCollection sonControls = fatherControl.Controls;foreach (Control control in sonControls){if (control.Controls != null){遍历界面控件(control);resources.ApplyResources(control, control.Name);}}}

如果各个控件之间不存在嵌套关系,可以用如下代码:

        public void 英文(){this.Text = "Input settings";this.Size = new Size(444, 340);Thread.CurrentThread.CurrentUICulture = new CultureInfo("en"); //英文是enComponentResourceManager resources = new ComponentResourceManager(typeof(注册界面));foreach (Control ct in this.Controls)//循环当前界面所有的控件(但是遍历不到控件中包含控件的控件){resources.ApplyResources(ct, ct.Name);if (ct.HasChildren){resources.ApplyResources(ct, ct.Name);}}}public void 中文(){this.Text = "输入设置";this.Size = new Size(297, 343);Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh"); //英文是enComponentResourceManager resources = new ComponentResourceManager(typeof(注册界面));foreach (Control ct in this.Controls)//循环当前界面所有的控件{resources.ApplyResources(ct, ct.Name);if (ct.HasChildren){resources.ApplyResources(ct, ct.Name);}}}

创建两个按钮,分别是中文和英文,将方法引用就可以了。

        private void zhToolStripMenuItem_Click(object sender, EventArgs e){中文按钮是否触发 = true;英文按钮是否触发 = false;注册界面对象.中文();}private void enToolStripMenuItem_Click(object sender, EventArgs e){英文按钮是否触发 = true;中文按钮是否触发 = false;注册界面对象.英文();}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/24572.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

海思SS928(SD3403)部署YOLOv5-YOLOv7步骤详解

1. YOLO模型资料 本文档内容以yolov5-7.0工程、yolov5s模型为例。 a. 模型结构 详细的模型结构可以利用netron工具打开.pt或.onnx模型查看。 b. 模型参数即验证结果 其中,YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x为五种类型的预训练模型,其包含的检测类别相…

利用Pandas进行数据清洗与过滤:Python实战指南

利用Pandas进行数据清洗与过滤:Python实战指南 作为一个Python爱好者和数据分析从业者,我一直在探索如何利用Python来更高效地处理和分析数据。Python语言以其简单易学、功能强大的特点,成为了数据分析领域的宠儿。本文将分享一些实用的Pyth…

2024 cicsn ezbuf

文章目录 参考protobuf逆向学习复原结构思路exp 参考 https://www.y4ng.cn/posts/pwn/protobuf/#ciscn-2024-ezbuf protobuf 当时压根不知道用了protobuf这个玩意,提取工具也没提取出来,还是做题做太少了,很多关键性的结构都没看出来是pro…

android 异屏同显---学习笔记

实现 Android 异屏同显(多个屏幕显示同样的画面)可以通过多种方法来完成,具体实现方式会根据你的需求和设备的支持情况有所不同。以下是几种常见的方法: 方法 1:使用 Cast SDK 如果你想要将内容投屏到智能电视或其他支持 Cast 的设备上,可以使用 Google Cast SDK。 主…

Unity 集成 FMOD 音频管理插件 2.02

Unity 集成 FMOD 音频管理插件 2.02 3. 集成教程:3.1 设置Unity项目3.2 设置FMOD项目3.3 设置 FMOD for Unity3.4 添加声音:卡丁车引擎3.5 添加声音:氛围3.6 添加声音:音乐3.7 删除现有音频3.8 下一步 10. 脚本 API 参考10.1 基础…

Java锁的四种状态(无锁、偏向级锁、轻量级锁、重量级锁)

介绍 首先,我们需要明确一点:偏向级锁、轻量级锁、重量级锁只针对synchronized 锁的状态总共有四种,级别由低到高依次为:无锁、偏向锁、轻量级锁、重量级锁。 这四种锁状态分别代表什么,为什么会有锁升级&#xff…

在UI界面中实现3d人物展示

简要原理(设置双摄像机): 为需要展示的3D人物单独设置一个摄像机(只设置为渲染人物层级),主要摄像机的方向与人物方向一致,但摄像机需要需要旋转180,设置的角度自行进行微调创建一个Render Texture类型的组件用于存储摄像机渲染的内容UI上设置需要展示的图片区域,图片…

遍历目录

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 遍历在汉语中的意思是全部走遍,到处周游。在Python中,遍历是将指定的目录下的全部目录(包括子目录)及…

聪明人社交的基本顺序:千万别搞反了,越早明白越好

聪明人社交的基本顺序:千万别搞反了,越早明白越好 国学文化 德鲁克博雅管理 2024-03-27 17:00 作者:方小格 来源:国学文化(gxwh001) 导语 比一个好的圈子更重要的,是自己优质的能力。 唐诗宋…

【重学C语言】十九、SDL2 图形化编程的使用

【重学C语言】十九、SDL2 图形化编程的使用 SDL2 的第一个程序渲染器纹理渲染1. 纹理的概念2. 加载纹理3. 渲染纹理4. 纹理设置和查询5. 纹理渲染流程6. 注意事项SDL2_imageSDL2 的第一个程序 #define SDL_MAIN_HANDLED #include <SDL.h>int main(int argc, char* argv[…

AH股高开低走,创业板跌超2%,宁德时代下挫6%,微盘股指数反弹超5%

创业板跌2%&#xff0c;权重股宁德时代跌近6%&#xff1b;地产、光刻机概念股逆势大涨&#xff1b;券商股午后集体下跌&#xff0c;天风证券一度跌停。微盘股指数经历连跌后早盘反弹超5%。 内容提要 周五&#xff0c;A股高开后回落&#xff0c;午盘震荡回升。截至收盘&#x…

python-Bert(谷歌非官方产品)模型基础笔记0.1.096

python-bert模型基础笔记0.1.015 TODOLIST官网中的微调样例代码Bert模型的微调限制Bert的适合的场景Bert多语言和中文模型Bert模型两大类官方建议模型Bert模型中名字的含义Bert模型包含的文件Bert系列模型参数介绍微调与迁移学习区别Bert微调的方式Pre-training和Fine-tuning区…

Python可视化 | 使用matplotlib绘制面积图示例

面积图是数据可视化中的一个有效工具&#xff0c;用于说明时间上的关系和趋势。它们提供了一种全面的、视觉上迷人的方法&#xff0c;通过熟练地将折线图的可读性与填充区域的吸引力相结合来呈现数值数据。 在本文中&#xff0c;我们将学习更多关于在Python中创建面积折线图的…

【python】python指南(二):命令行参数解析器ArgumentParser

一、引言 对于算法工程师来说&#xff0c;语言从来都不是关键&#xff0c;关键是快速学习以及解决问题的能力。大学的时候参加ACM/ICPC一直使用的是C语言&#xff0c;实习的时候做一个算法策略后台用的是php&#xff0c;毕业后做策略算法开发&#xff0c;因为要用spark&#x…

24考研408大变化,25考研高分上岸规划+应对策略

巧了&#xff0c;我有现成的经验&#xff1a; 数学和专业课的成绩都不高不低&#xff0c;刚好够用&#xff0c;其实408想上岸&#xff0c;不仅仅要学好408&#xff0c;还要学好考研数学&#xff0c;这是我的肺腑之言&#xff0c;我复试的时候&#xff0c;我知道的那些没有进复试…

高通SDX12:Voice Over USB 功能调试

一、功能概述及使用环境 Linux PC 作为上位机,内置 SLIC基于高通 SDX12 平台的设备作为从设备,通过USB连接到 Linux PC 上,在 PC 上枚举 UAC 设备从设备进行 MO/MT Call 时,上位机使用 arecord 进行录音,音频数据通过 USB 传至上位机,上位机停止录音后再使用 aplay 进行播…

vue element 接口返回数据与控制台打印数据不一致 踩坑

问题描述&#xff1a; 接口返回数据正常&#xff0c;&#xff0c;控制台打印不对&#xff0c;element el-switch表格中使用&#xff0c;控制台打印数据被改变 如下正常数据 数据id 17状态是0 控制台打印状态却是1 造成原因&#xff1a; element el-seitch组件修改了状态 修…

解决方案:昇腾aarch64服务器安装CUDA+GCC+CMake,编译安装Pytorch,华为昇腾HPC服务器深度学习环境安装全流程

目录 一、安装CUDA和cudnn1.1、下载CUDA驱动1.2、安装CUDA驱动1.3、配置环境变量1.4、安装cudnn1.5、安装magma-cuda 二、安装gcc编译器三、安装CMake四、安装NCCL五、编译安装Pytorch5.1、前提准备5.2、下载pytorch源码5.3、配置环境变量5.4、Pytorch编译安装5.5、测试Pytorch…

Python教程:Python操作MySQL基础使用

8、Python操作MySQL基础使用 8.1 安装pymysql pip install pymysql8.2 测试连接 测试代码 from pymysql import Connection# 获取到MySQL数据库的链接对象 conn Connection(# 主机名hostlocalhost,# 端口号,默认3306port3306,# 账户名userroot,# 密码password3535 )# 打印…

日志分析集群最新版

日志分析集群-8版本 作者&#xff1a;行癫&#xff08;盗版必究&#xff09; 第一部分&#xff1a;Elasticsearch 一&#xff1a;环境准备 1.简介 ​ 部署模式&#xff1a;es集群采用无主模式 ​ es版本&#xff1a;8.13.4 ​ jdk版本&#xff1a;使用es内嵌的jdk21&#x…