博客统计信息

51cto推荐博客
用户名:lijun4183
文章数:14
评论数:35
访问量:38532
无忧币:20
博客积分:782
博客等级:3
注册日期:2007-09-17

我的技术圈(2)

更多>>
写了一个winform 多国语言切换的助手组件类
2007-09-18 14:15:48
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://happyoldbear.blog.51cto.com/231048/43049
最近在网上综合了各种资料,写了一个完整的切换语言助手类。
接口SetLanguage(string languageName,Form form)
可以对某个窗口进行语言切换。
languageName是语言的代码。
 
目前可以支持窗口,菜单,工具栏,按钮等。
但是还没有找到比较好的,通用的listbox,combobox的方法。
希望兄弟们涌跃讨论,能否找到一个解决listbox,combobox的方法。
 
主要思想:
循环设置所有的窗口控件,菜单和工具栏需要递归设置所有的items.
 
源代码如下:
 
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Threading;
using System.Windows.Forms;
using System.Globalization;
namespace Hob.Toolbox.Classes
{
    /// <summary>
    /// 动态切换语言的助手类
    /// 支持动态切换窗口,菜单及子项,工具栏及子项,其他控件属性。
    /// 2007.8.23
    /// </summary>
    public partial class LocalizeHelper:Component
    {
        #region 构造函数
        public LocalizeHelper()
        {
            InitializeComponent();
        }
        public LocalizeHelper(IContainer container)
        {
            container.Add(this);
            InitializeComponent();
        }
        #endregion
        /// <summary>
        /// public method SetLanguage
        /// </summary>
        /// <param name="languageName"></param>
        /// <param name="form"></param>
        /// <returns></returns>
        public bool SetLanguage(string languageName,Form form)
        {
            try
            {
                Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(languageName);
                Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(languageName);
                ComponentResourceManager resources = new ComponentResourceManager(form.GetType());
                resources.ApplyResources(form, "$this");
                ApplyResouce(form, resources);
                return true;
            }
            catch
            {
                return false;
            }
        }
        /// <summary>
        /// set language for control and all child controls
        /// </summary>
        /// <param name="control"></param>
        /// <param name="resources"></param>
        private void ApplyResouce(Control control, ComponentResourceManager resources)
        {
            //for every control
            foreach (Control c in control.Controls)
            {
                resources.ApplyResources(c, c.Name);
                ApplyResouce(c, resources);
                if (c is ToolStrip)
                    ApplyResouce(c as ToolStrip, resources);
            }
        }
        /// <summary>
        /// set language for toolstrip all child item
        /// </summary>
        /// <param name="toolstrip"></param>
        /// <param name="resources"></param>
        private void ApplyResouce(ToolStrip toolstrip, ComponentResourceManager resources)
        {
            if (toolstrip.Items.Count > 0)
            {
                foreach (ToolStripItem item in toolstrip.Items)
                    ApplyResouce(item, resources);
            }
        }
        /// <summary>
        /// set language for toolstripitem and all child items
        /// </summary>
        /// <param name="item"></param>
        /// <param name="resources"></param>
        private void ApplyResouce(ToolStripItem item, ComponentResourceManager resources)
        {
            resources.ApplyResources(item, item.Name);
            if (item is ToolStripDropDownItem)
            {
                ToolStripDropDownItem ditem = item as ToolStripDropDownItem;
                if (ditem.DropDownItems.Count > 0)
                {
                    foreach(ToolStripItem sitem in ditem.DropDownItems)
                        ApplyResouce(sitem, resources);
                }
            }
        }
    }
}
整个工程代码下载:

本文出自 “欢乐老熊” 博客,请务必保留此出处http://happyoldbear.blog.51cto.com/231048/43049

分享至
更多
一键收藏,随时查看,分享好友!
0人
了这篇文章

附件下载:
  源代码
类别:Hob工具箱技术圈()┆阅读()┆评论() ┆ 推送到技术圈返回首页

文章评论

 
2007-09-19 09:02:50
源代码还要解压,不方便
直接贴出来不行吗

2007-09-19 21:36:36
很不错
留下
很有用的工具

2007-09-20 09:19:04
挺有用。

2008-10-16 14:41:49
今天不小心看到,添加一段datagridview的循環:
    private void ApplyResouce(DataGridView dgv, ComponentResourceManager resources)
    {
        if (dgv.ColumnCount > 0)
        {
          foreach (DataGridViewColumn dgvc in dgv.Columns)
          {
            resources.ApplyResources(dgvc, dgvc.Name);
          }
        }
    }

2009-04-10 19:47:54
public void ApplyResource(ComboBox cob, ComponentResourceManager resources)
    {
        if (cob.Items.Count > 0)
        {
          string strname="";
          strname = cob.Name+".Items";
          cob.Items[0] = GetString(strname, this.Name);
          for (int i = 1; i < cob.Items.Count;i++ )
          {
            strname = cob.Name+".Items";            
            cob.Items[i] = GetString(strname+i, this.Name);
          }
         
        }
    }
尝试需求终于成功。

2009-04-10 19:49:17
尝试了很久才做出ComboBox 的切换语系,测试ok

2009-12-11 09:27:18
如何实现图片的多语言呢?

2012-03-28 14:40:32
5 floor, have a good test.
thanks.

 

发表评论            

【技术门诊】专家解析:软考重点难点及应试技巧
昵  称:
登录  快速注册
验证码:

请点击后输入验证码博客过2级,无需填写验证码

内  容: