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"); //英文是en
            ComponentResourceManager 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"); //英文是en
            ComponentResourceManager 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;
            注册界面对象.英文();
        }

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大厂真实面试题(一)

滴滴大数据sql 取出累计值与1000差值最小的记录 1.题目 已知有表t_cost_detail包含id和money两列,id为自增,请累加计算money值,并求出累加值与1000差值最小的记录。 2.分析 本题主要是想找到累加值域1000差距最小的记录,也就是我们要对上述按照id进行排序并且累加,并…

Python 机器学习 基础 之 【实战案例】中药数据分析项目实战

Python 机器学习 基础 之 【实战案例】中药数据分析项目实战 目录 Python 机器学习 基础 之 【实战案例】中药数据分析项目实战 一、简单介绍 二、中药数据分析项目实战 三、数据处理与分析实战 1、数据读取 2、中药材数据集的数据处理与分析 2.1数据清洗 2.2、 提取别…

如何微调 Llama 3 进行序列分类?

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

如何在隔离环境中设置 LocalAI 以实现 GPU 驱动的文本嵌入

作者:来自 Elastic Valeriy Khakhutskyy 你是否想在 Elasticsearch 向量数据库之上构建 RAG 应用程序?你是否需要对大量数据使用语义搜索?你是否需要在隔离环境中本地运行?本文将向你展示如何操作。 Elasticsearch 提供了多种方法…

Python:处理矩阵之NumPy库(上)

目录 1.前言 2.Python中打开文件操作 3.初步认识NumPy库 4.使用NumPy库 5.NumPy库中的维度 6.array函数 7.arange函数 8.linspace函数 9.logspace函数 10.zeros函数 11.eye函数 前言 NumPy库是一个开源的Python科学计算库,它提供了高性能的多维数组对象、派生对…

CSS函数: translate、translate3d的使用

translate()和translate3d()函数可以实现元素在指定轴的平移的功能。函数使用在CSS转换属性transform的属性值。实现转换的函数类型有: translate():2D平面实现X轴、Y轴的平移translate3d():3D空间实现位置的平移translateX():实…

中国现代书法第一人颜廷利:全球知名哲学家思想家教育家

在人生的旅途中,如果一个人的所有追求仅仅是为了满足自己的需求和欲望,而非出于善意、行善或造福他人,那么无论其遭受了多少苦难,这样的生活是难以赢得他人的同情或怜悯的。这是东方哲学家、科学家颜廷利教授在其著作《升命学说》…

GQA,MLA之外的另一种KV Cache压缩方式:动态内存压缩(DMC)

0x0. 前言 在openreview上看到最近NV的一个KV Cache压缩工作:https://openreview.net/pdf?idtDRYrAkOB7 ,感觉思路还是有一些意思的,所以这里就分享一下。 简单来说就是paper提出通过一种特殊的方式continue train一下原始的大模型&#x…

一场决定未来的战役,又是梦想起航的地方

大家好,我是小悟 今天不聊技术也不说系统,2024年高考的第一天,首先祝愿所有高考生在这特别的日子里,心态沉稳,答题顺利,让多年的努力在这一刻绽放光芒。 高考,这个承载了无数青春梦想与汗水的…

【栈】2751. 机器人碰撞

本文涉及知识点 栈 LeetCode2751. 机器人碰撞 现有 n 个机器人,编号从 1 开始,每个机器人包含在路线上的位置、健康度和移动方向。 给你下标从 0 开始的两个整数数组 positions、healths 和一个字符串 directions(directions[i] 为 ‘L’ …

OCP-042之:Oracle结构体系

1. Oracle结构体系 1.1 概述 1.1.1 版本 版本后缀所代表的含义 i:代表基于Internet架构的数据库,如9i g:代表基于grid(网格)的数据库,如11g grid的目的:降低成本,提高服务质量,简化管理 Storage Grid:ASM(automatic storage management),继承了LVM技术,Oracl…

MySQL常用的库操作、表操作、INSERT、DELETE

库操作 查询数据库: show databases; 创建数据库: create database chat; 删除数据库: drop database chat; 选择数据库: use chat; 表操作 查询表: show tables&am…

OpenCompass 大模型评测作业(lesson 7)

书生浦语大模型实战系列文章目录 书生浦语大模型全链路开源体系发展历程和特点(lesson 1) 部署 InternLM2-Chat-1.8B(lesson 2-1) 部署八戒demo InternLM2-Chat-1.8B(lesson 2-2) 部署InternLM2-Chat-7B 模…

每日两题6

文章目录 删除并获得点数粉刷房子 删除并获得点数 分析 class Solution { public:int deleteAndEarn(vector<int>& nums) {const int N 10001;// 预处理int arr[N] {0};for (int& e : nums)arr[e] e;// 在 arr 上进行 打家劫舍 问题vector<int> f(N),…

转型AI产品经理(5):“锚定效应”如何应用在Chatbot产品中

锚定效应是认知心理学中一个重要的概念&#xff0c;它描述了人们在进行判断或决策时&#xff0c;往往过于依赖最先接收到的信息或数字&#xff08;即“锚点”&#xff09;&#xff0c;即使后续信息与初始锚点无关甚至相反&#xff0c;这个初始信息也会显著地影响最终的判断结果…

哈希表与哈希扩容

一&#xff0c;哈希表 哈希表简单的理解&#xff1a;在记录的存储位置和它的关键字之间建立一个确定的对应关系f&#xff0c;使每个关键字和结构中一个唯一的存储位置相对应。 哈希表基于数组的&#xff0c;正因为数组创建后难于扩展某些哈希表被基本填满时&#xff0c;性能下…

【虚拟现实】一、AR与VR的基本原理

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 增强现实&#xff08;AR&#xff09;和虚拟现实&#xff08;VR&#xff09;技术已经从科幻小说走入现实&#xf…

Mysql使用中的性能优化——索引数对插入操作性能的影响

表的索引可以给数据检索提升效率&#xff0c;但是也给表的增删改操作带来代价。本文我们将关注&#xff0c;索引数量对INSERT操作的影响。 结论 索引数的新增会造成INSERT操作效率下降&#xff0c;约每增一个索引会降低10%效率。 实验数据 可以看到0个索引的效率是7个索引效…

记一次极其坑爹的 process.waitFor() 卡死问题

项目中有个需求需要截取wav的音频文件 &#xff0c;网上找了找方法 用java调用ffmpeg 来截取 public static InputStream trimAudio(MultipartFile inputFile, Double startTime, Double endTime,Double volume) throws IOException {File file new File(FileUtil.getTmpDir…

深度学习笔记: 最详尽广告点击预测系统设计

欢迎收藏Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star, 有问题可以随时与我交流, 谢谢大家&#xff01; 广告点击预测 1. 问题描述 建立一个机器学习模型来预测广告是否会被点击。 为了简化&#xff0c;我们不…