我在 vb.net 中有一个名为“form1”的表单。这个表单有很多控件。我打开 form1.designer.vb 文件并放入一个 if else 表达式,例如:
如果 getLanguage() = "en"then label1.text = "Good Morning"Else label1.Text = "Bonjour"
这在运行时工作得很好。
如果我在设计中打开 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)
如其他答案所述,最好在 IDE 中使用 .Localizable
属性并将其从 False
更改为 True
。然后您将可以使用多种默认语言。您不必费心编写代码。
- 选择一种语言开始:例如
英语
。 - 然后编辑每个控件的文本:在按钮中写“你好”,在标签中写“早上好”,在 MenuItem 中写“因为我很高兴”等。
- 然后再次更改语言,选择
法语
。 - 然后再次编辑每个控件并写下“Bonjour”、“Je vous souhaite un bon matin”、“Parceque je suis de bonne humeur”……是您丢失了之前的文本但是要有信心!
- 编译您的项目而不启动它,您会看到 IDE 创建了两个新文件:
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
瞧!我知道我说过您不必费心编写代码,但是构造函数中上面的位足以处理语言的选择。 加上 besoin de taper du code superflu après ça。
关于c# - 在设计模式下进行编辑时 designer.vb 文件中的自定义代码消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27001210/