zoukankan      html  css  js  c++  java
  • WinForm 程序的界面多语言切换

    下面介绍一种只需对现有代码做较小改动的方法。

    在 Visual Studio 的设计视图中,如果在 Properties 窗口中改变了程序的默认界面语言(Language),我们会注意到无论是工程还是窗体对应的 .Designer.cs 文件都会有显著的改变。比如,我们创建一个叫 MyForm 的 form,并且添加一个叫 MyButton 的按钮。

    在改变窗体 Properties 中的 Language 属性之前, .Designer.cs 代码文件中的 InitializeComponent 方法的内容大致如下:

    • private void InitializeComponent()
    • {
    • this.myButton = new System.Windows.Forms.Button();
    • this.SuspendLayout();
    • //
    • // myButton
    • //
    • this.myButton.Location = new System.Drawing.Point(100, 200);
    • this.myButton.Name = "myButton";
    • this.myButton.Size = new System.Drawing.Size(75, 23);
    • this.myButton.TabIndex = 0;
    • this.myButton.Text = "My Button";
    • this.myButton.UseVisualStyleBackColor = true;
    • //
    • // myForm
    • //
    • this.ClientSize = new System.Drawing.Size(292, 273);
    • this.Controls.Add(this.myButton);
    • this.Name = "MyForm";
    • this.Text = "My Form";
    • this.ResumeLayout(false);
    • }

    而在改变了窗体 Properties 中的 Language 属性之后,工程中除了默认的 .resx 文件之外,还会自动添加一个 .zh-CHS.resx 文件(假设我们将 Language 改变为 Chinese (Simplified))。另外,.Designer.cs 文件中的 InitializeComponent 方法也会改变成:

    • private void InitializeComponent()
    • {
    • System.ComponentModel.ComponentResourceManager resources
    • = new System.ComponentModel.ComponentResourceManager(typeof(MyForm));
    • this.myButton = new System.Windows.Forms.Button();
    • this.SuspendLayout();
    • //
    • // myButton
    • //
    • this.myButton.AccessibleDescription = null;
    • this.myButton.AccessibleName = null;
    • resources.ApplyResources(this.myButton, "myButton");
    • this.myButton.BackgroundImage = null;
    • this.myButton.Font = null;
    • this.myButton.Name = "myButton";
    • this.myButton.UseVisualStyleBackColor = true;
    • //
    • // myForm
    • //
    • this.AccessibleDescription = null;
    • this.AccessibleName = null;
    • resources.ApplyResources(this, "$this");
    • this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    • this.BackgroundImage = null;
    • this.Controls.Add(this.myButton);
    • this.Font = null;
    • this.Icon = null;
    • this.Name = "myForm";
    • this.ResumeLayout(false);
    • }

    我们注意到改变 Language 属性之后,代码的主要变化有:

    • ComponentResourceManager resources = new ComponentResourceManager(typeof(MyForm));
    • resources.ApplyResources(this.myButton, "myButton");
      resources.ApplyResources(this, "$this");

    另外,设置控件属性(比如显示文字 Text,控件大小 Size,显示位置 Location 等)的代码都没有了。也就是说设置控件属性的代码都是由 resources.ApplyResource 方法来完成的。那么在我们想改变 WinForm 程序的界面显示语言的时候,能不能直接调用 ApplyResources 方法呢?答案是肯定的。

    为 myButton 添加 Click 事件的事件处理函数:

    • private void myButton_Click(object sender, EventArgs e)
    • {
    • int currentLcid = Thread.CurrentThread.CurrentUICulture.LCID;
    • currentLcid = (currentLcid == 2052) ? 1033 : 2052;
    •  
    • // Changes the CurrentUICulture property before changing the resources that are loaded for the win-form.
    • Thread.CurrentThread.CurrentUICulture = new CultureInfo(currentLcid);
    •  
    • // Reapplies resources.
    • ComponentResourceManager resources = new ComponentResourceManager(typeof(MyForm));
    • resources.ApplyResources(myButton, "myButton");
    • resources.ApplyResources(this, "$this");
    • }

    当程序运行的时候,点击窗体上的 myButton 按钮,窗体的界面显示语言就会在英语和简体中文之间互相切换。


    以下是有可能用的帮助方法

     1        SetLang


     

  • 相关阅读:
    "字符反向拼接"组件:<reverse> —— 快应用组件库H-UI
    "首字母变大写"组件:<capitalize> —— 快应用组件库H-UI
    "字母全变大写"组件:<uppercase> —— 快应用组件库H-UI
    "字母全变小写"组件:<lowercase> —— 快应用组件库H-UI
    "多行文本"组件:<multi> —— 快应用组件库H-UI
    "斜体显示"组件:<i> —— 快应用组件库H-UI
    捕捉AVPlayerViewController 系统原生工具栏的出现、隐藏事件
    (简单实用)Android支付宝商家收款语音播报
    使用wkwebview时,push后,再pop返回,报错
    安卓进度条两边圆角+渐变的拓展
  • 原文地址:https://www.cnblogs.com/luqingfei/p/674035.html
Copyright © 2011-2022 走看看