欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

效果圖如下:

中文:

英語:

泰語:

窗體設(shè)置

下面來說一下流程:

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

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

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

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

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

實時語言切換

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

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

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

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

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

        /// <summary>
        /// 修改默認語言
        /// </summary>
        /// <param name="lang">待設(shè)置默認語言</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>
        /// 加載語言
        /// </summary>
        /// <param name="form">加載語言的窗口</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>
        /// 加載語言
        /// </summary>
        /// <param name="control">控件</param>
        /// <param name="resources">語言資源</param>
        private static void Loading(Control control, System.ComponentModel.ComponentResourceManager resources)
        {
            if (control is MenuStrip)
            {
                //將資源與控件對應
                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">菜單項</param>
        /// <param name="resources">語言資源</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賦值為當前默認語言,即簡體中文或英文。

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

4.編寫用于切換語言的ComboBox的SelectedIndexChanged事件,使得當用戶選擇對應的語言時,程序會切換到該語言。

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

private void languageTxt_SelectedIndexChanged(object sender, EventArgs e)
        {
            comboBox1.Enabled = false;
            if (comboBox1.Text == "中文")
            {
                //修改默認語言
                MultiLanguage.SetDefaultLanguage("zh-CN");
                //對所有打開的窗口重新加載語言
                foreach (Form form in Application.OpenForms)
                {
                    LoadAll(form);
                }
            }
            else if (comboBox1.Text == "English")
            {
                //修改默認語言
                MultiLanguage.SetDefaultLanguage("en-US");
                //對所有打開的窗口重新加載語言
                foreach (Form form in Application.OpenForms)
                {
                    LoadAll(form);
                }
            }
            else if(comboBox1.Text == "???")
            {
                //修改默認語言
                MultiLanguage.SetDefaultLanguage("th-TH");
                //對所有打開的窗口重新加載語言
                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實現(xiàn)多語言切換的示例的文章就介紹到這了,更多相關(guān)C# WinForm多語言切換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#連接藍牙設(shè)備的實現(xiàn)示例

    C#連接藍牙設(shè)備的實現(xiàn)示例

    本文主要介紹了C#連接藍牙設(shè)備的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • C# MemoryStream類案例詳解

    C# MemoryStream類案例詳解

    這篇文章主要介紹了C# MemoryStream類案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C#如何打開并讀取usb的文件目錄

    C#如何打開并讀取usb的文件目錄

    這篇文章主要介紹了用C#語言實現(xiàn)打開并讀取usb的文件目錄,但是實現(xiàn)此功能要注意一點必須在u盤插入才能接受到信息,需要的朋友可以參考下
    2015-07-07
  • c# 如何自己實現(xiàn)一個ORM框架

    c# 如何自己實現(xiàn)一個ORM框架

    這篇文章主要介紹了c# 如何自己實現(xiàn)一個ORM,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#多線程中的異常處理操作示例

    C#多線程中的異常處理操作示例

    這篇文章主要介紹了C#多線程中的異常處理操作,涉及C#多線程及異常的捕獲、處理等相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05
  • c#使用IMap收取163郵件的方法示例

    c#使用IMap收取163郵件的方法示例

    大家都知道,設(shè)置IMAP服務后,不論是在客戶端、手機、iPad還是網(wǎng)頁中,發(fā)送郵件、閱讀郵件后在各處均可以同步顯示。下面這篇文章主要介紹了c#使用IMap收取163郵件的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下。
    2018-02-02
  • C#實現(xiàn)文件斷點續(xù)傳下載的方法

    C#實現(xiàn)文件斷點續(xù)傳下載的方法

    這篇文章主要介紹了C#實現(xiàn)文件斷點續(xù)傳下載的方法,涉及網(wǎng)絡(luò)文件操作的相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下
    2015-05-05
  • C#和Java中二維數(shù)組區(qū)別分析

    C#和Java中二維數(shù)組區(qū)別分析

    這篇文章主要介紹了C#和Java中二維數(shù)組區(qū)別分析,主要講述了二維數(shù)組在C#和Java中定義及應用的區(qū)別,非常實用,需要的朋友可以參考下
    2014-10-10
  • C#數(shù)字圖像處理之圖像二值化(彩色變黑白)的方法

    C#數(shù)字圖像處理之圖像二值化(彩色變黑白)的方法

    這篇文章主要介紹了C#數(shù)字圖像處理之圖像二值化(彩色變黑白)的方法,可實現(xiàn)圖像從彩色轉(zhuǎn)變?yōu)楹诎椎男Ч?非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • C#?wpf使用DockPanel實現(xiàn)制作截屏框

    C#?wpf使用DockPanel實現(xiàn)制作截屏框

    做桌面客戶端的時候有時需要實現(xiàn)截屏功能,能夠在界面上框選截屏,本文就來為大家介紹一下wpf如何使用DockPanel制作截屏框吧,感興趣的可以了解下
    2023-09-09

最新評論