Winform中英文切换

写出来之后有点累了,待日后再去学习更好的了

应用类
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Collections;
using System.Globalization;

namespace 中英文界面
{
public partial class FormMain : Form
{
LanguageUtil language;

    public FormMain()
    {
        InitializeComponent();
    }

    private void TSMIChinese_Click(object sender, EventArgs e)
    {
        language = new LanguageUtil(this,"zh");
    }

    private void TSMIEnglish_Click(object sender, EventArgs e)
    {
        language = new LanguageUtil(this, "en");
    }
}

}

工具类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Globalization;
using System.Resources;
using System.Collections;
using System.Windows.Forms;

namespace 中英文界面
{
class LanguageUtil
{
public Control control;
private ResourceManager resourceManager;

    public LanguageUtil(Control con,string language)
    {
        control = con;
        LoadResources(language);
    }

    private void LoadResources(string culture)
    {
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
        // 创建 ResourceManager 对象并指定资源文件的基本名称和程序集
        resourceManager = new ResourceManager("中英文界面.FormMain", typeof(FormMain).Assembly);
        UpdateUI();
    }

    private void UpdateUI()
    {
        control.Text = resourceManager.GetString("this.Text");
        // 获取资源的 ResourceSet
        ResourceSet resourceSet = resourceManager.GetResourceSet(System.Globalization.CultureInfo.CurrentCulture, true, true);
        // 遍历资源集中的每个资源
        if (resourceSet != null)
        {
            foreach (DictionaryEntry entry in resourceSet)
            {
                TraverseControls(control, entry.Key.ToString(), false);
            }
        }
    }

    private void TraverseControls(Control parentControl, string controlName, bool flag)
    {
        string name = controlName.Split('.')[0];
        if (flag) return;
        foreach (Control control in parentControl.Controls)
        {
            if (control.Name.Equals(name))
            {
                flag = true;
                control.Text = resourceManager.GetString(controlName);
            }
            if (flag) return;
            // 如果当前控件还包含子控件,递归遍历
            if (control.HasChildren)
            {
                TraverseControls(control, controlName, flag);
            }
        }
    }
}

}

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值