我在vb.net中有一个名为"form1“的表单。此窗体有许多控件。我打开了form1.designer.vb文件并放入了一个if其他表达式,如:
如果getLanguage() = "en“,则标记为1.text=”早安“,否则标记为1.Text= "Bonjour”。
这在运行时非常好。
如果我在设计中打开Form1.vbDesign页面并进行任何更改,那么上面的代码就会消失。
有什么方法可以让我在设计页面中保存任何代码吗?我不想把它们放在form1.vb文件中的load事件中。
发布于 2014-11-18 21:17:36
找到以下代码:
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)
正如其他答案所述,最好在IDE中使用.Localizable
属性,并将其从False
更改为True
。然后您将获得几种默认语言的访问权限。你不必费心写代码。
English
。French
。Form1.en.resx
和Form1.fr.resx
(大约)以及Form1.vb
和Form1.Designer.vb
。不要编辑他们!如果打开en.resx或fr.resx,您将看到您所做的编辑是中的。这些文件用于为窗体存储内置的Lang相关资源。这就是所谓的全球化。
然后再次定位表单的构造函数。
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
还有哇哦!我知道我说过不必费心编写代码,但构造函数中的上述部分足以处理语言的选择。再加上贝索恩·德·塔帕杜编码的超级流感。
发布于 2014-11-18 20:34:04
对于您的例子,最好是使用窗体的属性。
.Localizable = true
.Language = Default(French)/English/or others
Visual创建一个类的两个文件(这是您的表单)- 部分类
因此,在哪个文件中编写代码并不重要。
只有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
发布于 2014-11-18 18:57:48
designer.vb文件由Visual自动创建。每次编辑表单的设计时,都会重写该文件。那么,为什么您不想加载这些代码呢?load事件或构造函数(如前所述)是放置所需初始化的正确位置。
https://stackoverflow.com/questions/27001210
复制相似问题