VB.net Winform多国语言的实现

 在.net中实现多国语言的方法其实是很简单的。

下面就做一个示例跟大家一步一步地介绍:

首先新建一个VB.net的项目。项目名称随意。

建立一个MDI表单FrmMain和一个Form1表单。

然后新建一个铺助类LanguageHelper.vb

 

表单设计如下:

 VB.net Winform多国语言的实现_第1张图片

 

 中文语言特性界面设计如下:

VB.net Winform多国语言的实现_第2张图片

 

 

英文语言特性界面设计如下:

VB.net Winform多国语言的实现_第3张图片

 

最后看一下资源文件:

VB.net Winform多国语言的实现_第4张图片

 

下面来看实现的代码:

首先,我们创建一个铺助类,为切换语言提供一些方法。

 Imports System Imports System.Collections.Generic Imports System.Text Imports System.ComponentModel Imports System.Threading Imports System.Windows.Forms Imports System.Globalization Public Class LanguageHelper '''

''' 改变程序当前使用的语言特性 ''' ''' 语言名称 ''' Form类别 ''' ''' Public Shared Function SetLanguage(ByVal languageName As String, ByVal frm As Form) As Boolean Try '改变当前线程的UI资源文件 Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(languageName) '改变当前线程的资源文件 Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(languageName) '创建一个资源管理器 Dim res As ComponentResourceManager = New ComponentResourceManager(frm.GetType) '将资源文件的内容更新至表单上 $this在资源文件中表示窗体本身。 res.ApplyResources(frm, "$this") '递归更新资源文件的内容到表单控件上 ApplyResouce(frm, res) Return True Catch ex As Exception Return False End Try End Function ''' ''' 更新资源文件的内容到表单控件上 ''' ''' 要更新的控件 ''' 资源文件管理器 ''' Private Shared Sub ApplyResouce(ByVal control As Control, ByVal res As ComponentResourceManager) For Each c As Control In control.Controls res.ApplyResources(c, c.Name) ApplyResouce(c, res) If c.GetType().IsSubclassOf(GetType(ToolStrip)) Then ApplyResouce(CType(c, ToolStrip), res) End If Next End Sub ''' ''' set language for toolstrip all child item ''' ''' ''' Private Shared Sub ApplyResouce(ByVal toolstrip As ToolStrip, ByVal resources As ComponentResourceManager) If toolstrip.Items.Count > 0 Then For Each item As ToolStripItem In toolstrip.Items ApplyResouce(item, resources) Next End If End Sub ''' ''' 递归更新Menu的子菜单 ''' ''' ''' Private Shared Sub ApplyResouce(ByVal item As ToolStripItem, ByVal resources As ComponentResourceManager) resources.ApplyResources(item, item.Name) If (item.GetType.IsSubclassOf(GetType(ToolStripDropDownItem))) Then Dim ditem As ToolStripDropDownItem = CType(item, ToolStripDropDownItem) If ditem.DropDownItems.Count > 0 Then For Each sitem As ToolStripItem In ditem.DropDownItems ApplyResouce(sitem, resources) Next End If End If End Sub End Class

 

再来,MDI表单实现的代码如下:

 Imports System.Globalization Imports System.Threading Imports Microsoft.Win32 Public Class FrmMain Private Sub mnuChinese_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuChinese.Click Try mnuEnglish.Checked = False mnuChinese.Checked = True changeLanguage("zh-CN") Catch ex As Exception MsgBox(ex.Message) End Try End Sub Private Sub mnuEnglish_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuEnglish.Click Try mnuChinese.Checked = False mnuEnglish.Checked = True changeLanguage("en-US") Catch ex As Exception MsgBox(ex.Message) End Try End Sub '''

''' 切换语言的时候,如果有打开子窗体,那么我们需要同时更新MDI子窗体 ''' ''' ''' Private Sub changeLanguage(ByVal languageName As String) Try LanguageHelper.SetLanguage(languageName, Me) For Each frm As Form In Me.MdiChildren LanguageHelper.SetLanguage(languageName, frm) Next Catch ex As Exception Throw ex End Try End Sub Private Sub mnuOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuOpen.Click Dim frm As New Form1() frm.MdiParent = Me frm.Show() End Sub End Class

 

From1表单是作为一个子表单供测试用的就不必写实现代码喇!^-^

避免篇幅过长,程序运行的截图我就不贴出来了!

如需要找C#的版本请查看以下链接:

http://happyoldbear.blog.51cto.com/231048/43049

C#示例下载:http://download.csdn.net/source/1807232

VB.Net示例下载:http://download.csdn.net/source/1807230

你可能感兴趣的:(Winform,vb.net,winform,resources,exception,语言,文件管理器)