我在vb.net中有一个名为“form1”的表单。此表单有许多控件。我打开了form1.designer.vb文件并输入了if else表达式,例如:
如果getLanguage()=“en”那么label1.text =“早安”Else label1.Text =“Bonjour”
这在运行时完全正常。
如果我在设计中打开Form1.vb [Design]页面并进行任何更改,则上面的代码会消失。
有没有办法可以保存我在设计器页面中放入的代码? 我不想将它们放在form1.vb文件中的load事件中。
答案 0 :(得分:2)
对于您的示例,最好使用
形式的属性.Localizable = true
.Language = Default(French)/English/or others
Visual Studio创建一个类的两个文件(这是您的表单) - Partial Class
因此,编写代码的文件无关紧要
只有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
答案 1 :(得分:2)
找到此代码:
Public Sub New()
Me.InitializeComponent()
End Sub
然后添加一行:
Public Sub New()
Me.InitializeComponent()
Me.MakeComponentsChanges()
End Sub
然后在form1.vb或您创建的另一个Partial Class副本中创建方法:
Private Sub MakeComponentsChanges()
If getLanguage() = "en" then
label1.text = "Good Morning"
Else
label1.Text = "Bonjour"
End If
End Sub
请勿触摸form1.designer.vb(.cs)
如其他答案所述,最好在IDE中使用.Localizable
属性,并将其从False
更改为True
。然后您将获得几种默认语言的访问权限。你不必费心去编写代码。
English
。French
。Form1.en.resx
和Form1.fr.resx
(或左右)以及{{1 }和Form1.vb
。不要编辑它们!如果您打开en.resx或fr.resx,您会看到您所做的修改在那里。这些文件用于存储与您的表单内置的Lang相关的资源。这被称为全球化。
然后再次找到表单的构造函数。
Form1.Designer.vb
不要忘记在Class声明的顶部添加这两个名称空间:
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
瞧!我知道我说你不必费心去编写代码,但构造函数中的上述部分足以处理语言的选择。 Plus besoin de taper du codesuperfluprèsça。
答案 2 :(得分:1)
designer.vb文件由Visual Studio自动创建。每次编辑表单的设计时,都会重写该文件。 现在,为什么你不想在Load上拥有该代码? load事件或构造函数(如前所述)是放置所需初始化的正确位置。