您的位置:首页 > 编程语言 > VB

VB.net Winform多国语言的实现

2009-11-10 19:42 330 查看
在.net中实现多国语言的方法其实是很简单的。

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

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

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

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

表单设计如下:



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



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



最后看一下资源文件:



下面来看实现的代码:

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

]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

''' <summary>
''' 改变程序当前使用的语言特性
''' </summary>
''' <param name="languageName">语言名称</param>
''' <param name="frm">Form类别</param>
''' <returns></returns>
''' <remarks></remarks>
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

''' <summary>
''' 更新资源文件的内容到表单控件上
''' </summary>
''' <param name="control">要更新的控件</param>
''' <param name="res">资源文件管理器</param>
'''
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

''' <summary>
''' set language for toolstrip all child item
''' </summary>
''' <param name="toolstrip"></param>
''' <param name="resources"></param>
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

''' <summary>
''' 递归更新Menu的子菜单
''' </summary>
''' <param name="item"></param>
''' <param name="resources"></param>
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

''' <summary>
''' 切换语言的时候,如果有打开子窗体,那么我们需要同时更新MDI子窗体
''' </summary>
''' <param name="languageName"></param>
''' <remarks></remarks>
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#的版本请查看以下链接:

/article/7244901.html

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

VB.Net示例下载:http://download.csdn.net/source/1807230
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: