我有一个在vb.net名为“Form1的”形式。 这种形式有很多控制。 我打开Form1.Designer.vb文件,并放在一个的if else表达式,比如:
如果使用getLanguage()= “EN”,然后label1.text = “早安” 否则label1.Text = “卓悦”
这在运行时的工作完全正常。
如果我在设计中打开Form1.vb的[设计]页面,并进行更改,上面的代码就会消失。
有没有一种方法,我可以让我把在设计网页的任何代码? 我不想把他们在加载事件在Form1.vb文件。
找到这样的代码:
Public Sub New()
Me.InitializeComponent()
End Sub
然后添加一行:
Public Sub New()
Me.InitializeComponent()
Me.MakeComponentsChanges()
End Sub
然后创建Form1.vb的或方法创建的另一个分部类副本:
Private Sub MakeComponentsChanges()
If getLanguage() = "en" then
label1.text = "Good Morning"
Else
label1.Text = "Bonjour"
End If
End Sub
请勿触摸在Form1.Designer.vb(的.cs)
而在其他的答案说,更好地利用.Localizable
属性在IDE中,它改变从False
到True
。 然后,你将可以获得几个默认语言。 你不必费心编写代码。
- 选择一种语言入手:
English
的例子。 - 然后编辑控件文本中的每一个:在标签的按钮,“早上好”写“你好”,“因为我快乐”的菜单项等。
- 然后再次更改语言,选择
French
。 - 然后再编辑每个控制并写上“卓悦”,“JE VOUS souhaite联合国盂兰盆晨报”,“Parceque猪乙脑德保姆humeur” ...... 是你失去了以前的文本,但有信心 !
- 编译项目,而无需启动它,你会看到IDE创建两个新文件 :
Form1.en.resx
和Form1.fr.resx
沿(左右) Form1.vb
和Form1.Designer.vb
。 不要对其进行编辑!
如果你打开en.resx或fr.resx,你会看到你所做的编辑都在那里 。 这些文件是用来存储内置郎相关ressources为表单。 那是断然称为全球化。
然后再次找到您的窗体的构造函数。
Public Sub New()
Me.InitializeComponent()
'Me.MakeComponentsChanges()
' Now you know about some Globalization,
' you may get rid of that Method.
' Add two variables :
Dim OriginalCulture As CultureInfo
Dim CurrentOSCulture As CultureInfo
' Initialize them
OriginalCulture = Thread.CurrentThread.CurrentCulture
CurrentOSCulture = CultureInfo.CurrentCulture
' Do this test :
Try
Thread.CurrentThread.CurrentCulture = CurrentOSCulture ' may fail
Thread.CurrentThread.CurrentUICulture = CurrentOSCulture ' may fail
' Attempt to match the current Thread culture to the Operating System one.
Catch CurrentException As Exception
Thread.CurrentThread.CurrentCulture = OriginalCulture
Thread.CurrentThread.CurrentUICulture = OriginalCulture
' If it fails, revert back to default as defined in your IDE
End Try
End Sub
不要忘了在你的类声明这两个命名空间的顶部添加:
Imports System.Globalization
Imports System.Threading
瞧! 我知道我说你不必费心编写代码,但上面构造函数的位足以处理语言的选择。 另外besoin德锥杜代码superflu滑雪后的CA。
对于你的榜样,也许更好的将使用形式的财产
.Localizable = true
.Language = Default(French)/English/or others
Visual Studio中创建一个类的两个文件(这是你的形式) - 分部类
因此,它是并不重要的文件,你写你的代码。
只有Visual Studio中使用designer.vb
用来生成表单文件的更改你的设计师制作
从代码designer.vb
包含方法InitializeComponent
其在构造函数中执行。
创建你自己的方法,并调用它之后InitializeComponent
的构造。
或代码中创建第三个文件,如果你不把在希望yourform.vb
文件yourForm.MyDesigner.vb
'Using Keyword Partial not necessary anymore,
'because it is used in the `yourForm.Designer.vb`
Public Class yourForm
Public Sub Changelabel()
If getLanguage() = "en" Then
label1.text = "Good Morning"
Else
label1.Text = "Bonjour"
End If
End Sub
End Class
designer.vb文件是由Visual Studio自动创建。 每次编辑表单的设计时,该文件被重新写入。 现在,你为什么不想对加载代码? 负载事件或构造函数(如前所述)是在正确的地方,把你需要的任何初始化。