using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.ComponentModel;
using System.Threading;namespace GlobalizationTest
{
    public class LanguageLibrary
    {
        public class SetLanguage
        {
            /// <summary>
            /// 设置当前程序的界面语言
            /// </summary>
            /// <param name="lang">语言 </param>
            /// <param name="form">窗体</param>
            /// <param name="frmtype">窗体类型</param>
            public static void SetLang(string lang, Form form, Type frmtype)
            {
                Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lang);
                if (form != null)
                {
                    ComponentResourceManager resources = new ComponentResourceManager(frmtype);
                    resources.ApplyResources(form, "$this");
                    AppLang(form, resources,form.Width);
                }
            }
            #region AppLang for Control
            /// <summary>
            /// 遍历窗体所有控件,针对其设置当前界面语言
            /// </summary>
            /// <param name="contrl"></param>
            /// <param name="resoureces"></param>
            private static void AppLang(Control control, ComponentResourceManager resources,int FormWidth)
            {
                if (control is MenuStrip)
                {
                    control.Width = FormWidth;
                    //将资源应用与对应的属性
                    resources.ApplyResources(control, control.Name);
                    MenuStrip ms = (MenuStrip)control;
                    if (ms.Items.Count > 0)
                    {
                        foreach (ToolStripMenuItem c in ms.Items)
                        {
                            //调用 遍历菜单 设置语言
                            AppLang(c, resources, FormWidth);
                        }
                    }
                }                foreach (Control c in control.Controls)
                {
                    resources.ApplyResources(c, c.Name);
                    AppLang(c, resources,0);
                }
            }
            #endregion            #region AppLang for menuitem
            /// <summary>
            /// 遍历菜单
            /// </summary>
            /// <param name="item"></param>
            /// <param name="resources"></param>
            private static void AppLang(ToolStripMenuItem item, System.ComponentModel.ComponentResourceManager resources, int FormWidth)
            {
                if (item is ToolStripMenuItem)
                {
                    resources.ApplyResources(item, item.Name);
                    ToolStripMenuItem tsmi = (ToolStripMenuItem)item;
                    if (tsmi.DropDownItems.Count > 0)
                    {
                        foreach (ToolStripMenuItem c in tsmi.DropDownItems)
                        {
                            //if (tsmi != ToolStripSeparator)
                            //{ }
                            AppLang(c, resources, FormWidth);
                        }
                    }
                }
            }
            #endregion
        }
    }
}调用方法:
LanguageLibrary.SetLanguage.SetLang("zh-CHS", this, typeof(Form1));
异常情况如下:
1)切换前:2)切换后:注意:menuStrip、toolStrip、groupBox都缩回原始尺寸了,属性DOCK设置不起作用了,
有兴趣的我发给Demo程序研究一下?

解决方案 »

  1.   

    根据下面的演示来修改下你的程序:
    http://msdn.microsoft.com/zh-cn/library/y99d1cd3(v=vs.90).aspx
      

  2.   

    再附加一个实现方式:http://www.cnblogs.com/server126/archive/2010/03/29/2290643.html
      

  3.   

    对于字体的大小问题 在winfrom 里面需要设置几个地方 一个 size 包括minsize 和maxsize 另外一个就是achor 这个关系很大 对于menu的语言切换 最好还是从新打开一个process 比较好控制点吧 其他没弄过了
      

  4.   

    qianguohua,准确讲:都在一个窗体内,里面有menuStrip、toolStrip菜单,groupBox容器。
    A:中文下,menuStrip、toolStrip、groupBox都是充满窗体的,menuStrip、toolStrip的Dock值为Top,groupBoX的Dock值为Fill.我们知道,这种情况下,水平方向宽度都是撑满屏幕的,如(图一)B:menuStrip的“语言”菜单下,有两个子菜单,点击英文后,Click事件中调用方法LanguageLibrary.SetLanguage.SetLang("en-US", this, typeof(Form1))方法;切换到英文界面、toolStrip都缩回原始尺寸了,属性DOCK设置不起作用了,出现图2的情况。请问达人,如何解决啊??你一个裤衩也行,能解决就说明你具备星星潜质
      

  5.   

    请教版主bdmh caozhy lxcnn 哪位关注解答一下哦
      

  6.   

    加两行代码this.WindowState = FormWindowState.Normal;
    this.WindowState = FormWindowState.Maximized;
      

  7.   

    各位:调试程序如下
    http://download.csdn.net/detail/tacit/5508145