最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#WinForm實(shí)現(xiàn)多語(yǔ)言切換的示例

 更新時(shí)間:2023年01月30日 10:20:29   作者:晚風(fēng)偷吻云朵  
本文主要介紹了C#WinForm實(shí)現(xiàn)多語(yǔ)言切換的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

因項(xiàng)目需要,所以在網(wǎng)上找了一些方法實(shí)現(xiàn)了該功能,本文也是做一個(gè)總結(jié)和記錄。使用resx文件實(shí)現(xiàn)Winform多語(yǔ)言切換,以實(shí)現(xiàn)簡(jiǎn)體中文、英文、泰語(yǔ)的切換為例。如果后續(xù)需要增加其它語(yǔ)言的切換,只需要按照步驟重復(fù)操作即可。

效果圖如下:

中文:

英語(yǔ):

泰語(yǔ):

窗體設(shè)置

下面來說一下流程:

1.首先將Form1的 Localizable 屬性為 true( 設(shè)置該屬性后,.net 將根據(jù)不同的語(yǔ)言,為應(yīng)用程序生成不同的資源文件),然后將Language屬性設(shè)置為所需要的語(yǔ)言,如下所示。

2.當(dāng)把Language屬性設(shè)置成例如英語(yǔ)后,那么我們對(duì)窗體中的控件名稱進(jìn)行調(diào)整,如下圖:

別的語(yǔ)言也是這種操作,只是拿英語(yǔ)做個(gè)示例。當(dāng)我們把頁(yè)面調(diào)整完后,我們重新生成一下,然后再把上述Language屬性切回到默認(rèn)或漢語(yǔ)時(shí),再把項(xiàng)目重新生成一下。這樣的話,語(yǔ)言文件就會(huì)自動(dòng)生成好了。

注意:一定要重新啟動(dòng)一下,不然改過之后直接運(yùn)行不會(huì)出現(xiàn)語(yǔ)言文件!

當(dāng)我們把窗體的設(shè)置全部搞定后,我們來看怎么設(shè)置自動(dòng)切換,如圖所示,我是在登錄頁(yè)面就放了一個(gè)下拉框,當(dāng)選中語(yǔ)言時(shí),所有窗體的語(yǔ)言會(huì)自動(dòng)切換,接下來我們看一下實(shí)現(xiàn)方法。

實(shí)時(shí)語(yǔ)言切換

1.項(xiàng)目的Properties的Settings.settings中添加變量DefaultLanguage,用于保存當(dāng)前設(shè)置的默認(rèn)語(yǔ)言。當(dāng)下次啟動(dòng)程序時(shí),會(huì)讀取該變量,從而將程序的語(yǔ)言設(shè)置為上次程序關(guān)閉時(shí)的語(yǔ)言。第一次將默認(rèn)語(yǔ)言設(shè)置為中文zh-CN。

![(https://img-blog.csdnimg.cn/f24ff43e30c746469681cd2413ad7466.jpg)

2.創(chuàng)建一個(gè)靜態(tài)類(MultiLanguage.cs)用于編寫與切換語(yǔ)言相關(guān)的變量和代碼。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CodePrint
{
    //用于編寫與切換語(yǔ)言相關(guān)的變量和代碼
    class MultiLanguage
    {
        //當(dāng)前默認(rèn)語(yǔ)言
        public static string DefaultLanguage = "zh-CN";

        /// <summary>
        /// 修改默認(rèn)語(yǔ)言
        /// </summary>
        /// <param name="lang">待設(shè)置默認(rèn)語(yǔ)言</param>
        public static void SetDefaultLanguage(string lang)
        {
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lang);
            DefaultLanguage = lang;
            Properties.Settings.Default.DefaultLanguage = lang;
            Properties.Settings.Default.Save();
        }


        /// <summary>
        /// 加載語(yǔ)言
        /// </summary>
        /// <param name="form">加載語(yǔ)言的窗口</param>
        /// <param name="formType">窗口的類型</param>
        public static void LoadLanguage(Logins form, Type formType)
        {
            if (form != null)
            {
                System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(formType);
                resources.ApplyResources(form, "$this");
                Loading(form, resources);
            }
        }

        /// <summary>
        /// 加載語(yǔ)言
        /// </summary>
        /// <param name="control">控件</param>
        /// <param name="resources">語(yǔ)言資源</param>
        private static void Loading(Control control, System.ComponentModel.ComponentResourceManager resources)
        {
            if (control is MenuStrip)
            {
                //將資源與控件對(duì)應(yīng)
                resources.ApplyResources(control, control.Name);
                MenuStrip ms = (MenuStrip)control;
                if (ms.Items.Count > 0)
                {
                    foreach (ToolStripMenuItem c in ms.Items)
                    {
                        //遍歷菜單
                        Loading(c, resources);
                    }
                }
            }

            foreach (Control c in control.Controls)
            {
                resources.ApplyResources(c, c.Name);
                Loading(c, resources);
            }
        }


        /// <summary>
        /// 遍歷菜單
        /// </summary>
        /// <param name="item">菜單項(xiàng)</param>
        /// <param name="resources">語(yǔ)言資源</param>
        private static void Loading(ToolStripMenuItem item, System.ComponentModel.ComponentResourceManager resources)
        {
            if (item is ToolStripMenuItem)
            {
                resources.ApplyResources(item, item.Name);
                ToolStripMenuItem tsmi = (ToolStripMenuItem)item;
                if (tsmi.DropDownItems.Count > 0)
                {
                    foreach (ToolStripMenuItem c in tsmi.DropDownItems)
                    {
                        Loading(c, resources);
                    }
                }
            }
        }
    }
}

3.在窗體的Load(雙擊Form1即可跳轉(zhuǎn)至該事件)事件中讀取Properties.Settings.Default.DefaultLanguage,并將ComboBox賦值為當(dāng)前默認(rèn)語(yǔ)言,即簡(jiǎn)體中文或英文。

private void Login_Load(object sender, EventArgs e)
        {
            //設(shè)置combobox的值
            string language = Properties.Settings.Default.DefaultLanguage;
            if (language == "zh-CN")
            {
                comboBox1.Text = "簡(jiǎn)體中文(默認(rèn))";
            }
            else if (language == "en-US")
            {
                comboBox1.Text = "English";
            }
            else if(language == "th-TH")
            {
                comboBox1.Text = "???";
            }
            MultiLanguage.LoadLanguage(this, typeof(Logins));
        }

4.編寫用于切換語(yǔ)言的ComboBox的SelectedIndexChanged事件,使得當(dāng)用戶選擇對(duì)應(yīng)的語(yǔ)言時(shí),程序會(huì)切換到該語(yǔ)言。

事件添加方式如下:選中ComboBox,點(diǎn)擊事件,在SelectedIndexChanged事件中輸入方法名languageTxt_SelectedIndexChanged,按回車即可自動(dòng)生成。

private void languageTxt_SelectedIndexChanged(object sender, EventArgs e)
        {
            comboBox1.Enabled = false;
            if (comboBox1.Text == "中文")
            {
                //修改默認(rèn)語(yǔ)言
                MultiLanguage.SetDefaultLanguage("zh-CN");
                //對(duì)所有打開的窗口重新加載語(yǔ)言
                foreach (Form form in Application.OpenForms)
                {
                    LoadAll(form);
                }
            }
            else if (comboBox1.Text == "English")
            {
                //修改默認(rèn)語(yǔ)言
                MultiLanguage.SetDefaultLanguage("en-US");
                //對(duì)所有打開的窗口重新加載語(yǔ)言
                foreach (Form form in Application.OpenForms)
                {
                    LoadAll(form);
                }
            }
            else if(comboBox1.Text == "???")
            {
                //修改默認(rèn)語(yǔ)言
                MultiLanguage.SetDefaultLanguage("th-TH");
                //對(duì)所有打開的窗口重新加載語(yǔ)言
                foreach (Form form in Application.OpenForms)
                {
                    LoadAll(form);
                }
            }
            comboBox1.Enabled = true;
        }

LoadAll(form)方法:

private void LoadAll(Form form)
        {
            if (form.Name == "Logins")
            {
                MultiLanguage.LoadLanguage((Logins)form, typeof(Logins));
            }
            else if (form.Name == "CodePrint")
            {
                MultiLanguage.LoadLanguage((Logins)form, typeof(CodePrint));
            }
            else if(form.Name == "CodePrint")
            {
                MultiLanguage.LoadLanguage((Logins)form, typeof(CodePrint));
            }
        }

if里面就是我們可以切換的窗體名稱。

到此這篇關(guān)于C#WinForm實(shí)現(xiàn)多語(yǔ)言切換的示例的文章就介紹到這了,更多相關(guān)C# WinForm多語(yǔ)言切換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c#版在pc端發(fā)起微信掃碼支付的實(shí)例

    c#版在pc端發(fā)起微信掃碼支付的實(shí)例

    本篇文章主要介紹了c#版在pc端發(fā)起微信掃碼支付的實(shí)例,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2016-11-11
  • C#實(shí)現(xiàn)將TextBox綁定為KindEditor富文本

    C#實(shí)現(xiàn)將TextBox綁定為KindEditor富文本

    KindEditor?依靠出色的用戶體驗(yàn)和領(lǐng)先的技術(shù)提供富文本編輯功能,是一款非常受歡迎的HTML在線編輯器,下面我們就來看看C#如何將TextBox綁定為KindEditor富文本吧
    2024-04-04
  • C#實(shí)現(xiàn)炫酷啟動(dòng)圖-動(dòng)態(tài)進(jìn)度條效果

    C#實(shí)現(xiàn)炫酷啟動(dòng)圖-動(dòng)態(tài)進(jìn)度條效果

    這篇文章主要介紹了基于C#實(shí)現(xiàn)炫酷啟動(dòng)圖-動(dòng)態(tài)進(jìn)度條 效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • Unity技術(shù)手冊(cè)之Button按鈕使用實(shí)例詳解

    Unity技術(shù)手冊(cè)之Button按鈕使用實(shí)例詳解

    這篇文章主要為大家介紹了Unity技術(shù)手冊(cè)之Button按鈕使用實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 詳解C#中HashTable的用法

    詳解C#中HashTable的用法

    在.NET Framework中,Hashtable是System.Collections命名空間提供的一個(gè)容器,用于處理和表現(xiàn)類似keyvalue的鍵值對(duì),其中key通常可用來快速查找,同時(shí)key是區(qū)分大小寫;value用于存儲(chǔ)對(duì)應(yīng)于key的值
    2016-02-02
  • C#中sealed修飾符的具體使用

    C#中sealed修飾符的具體使用

    在 C# 中,sealed?是一個(gè)修飾符,用于限制繼承和重寫,本文就來介紹一下具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • WPF實(shí)現(xiàn)PropertyGrid功能

    WPF實(shí)現(xiàn)PropertyGrid功能

    這篇文章主要為大家詳細(xì)介紹了在WPF中如何借助WinForm的PropertyGrid實(shí)現(xiàn)屬性列表功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2024-11-11
  • C#實(shí)現(xiàn)加密exe文件

    C#實(shí)現(xiàn)加密exe文件

    這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)加密exe文件的功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-01-01
  • c#禁止通過拖動(dòng),雙擊標(biāo)題欄改變窗體大小的方法

    c#禁止通過拖動(dòng),雙擊標(biāo)題欄改變窗體大小的方法

    今天小編就為大家分享一篇c#禁止通過拖動(dòng),雙擊標(biāo)題欄改變窗體大小的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 解決C# winForm自定義鼠標(biāo)樣式的兩種實(shí)現(xiàn)方法詳解

    解決C# winForm自定義鼠標(biāo)樣式的兩種實(shí)現(xiàn)方法詳解

    本篇文章是對(duì)在C#中winForm自定義鼠標(biāo)樣式的兩種實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05

最新評(píng)論

东乌珠穆沁旗| 五原县| 蛟河市| 新田县| 玛沁县| 富川| 左贡县| 友谊县| 滕州市| 黄平县| 白沙| 巢湖市| 阜康市| 刚察县| 登封市| 平顺县| 玛沁县| 佛学| 鱼台县| 扬州市| 灵山县| 固原市| 博罗县| 射阳县| 屯留县| 中宁县| 北碚区| 嵩明县| 哈巴河县| 伽师县| 宁城县| 开化县| 临沂市| 嘉定区| 肇东市| 赣榆县| 武城县| 闸北区| 保德县| 格尔木市| 调兵山市|