gpt4 book ai didi

c# - 在设计模式下进行编辑时 designer.vb 文件中的自定义代码消失

转载 作者:太空宇宙 更新时间:2023-11-03 20:02:00 25 4
gpt4 key购买 nike

我在 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.resxForm1.fr。 resx(或左右)以及 Form1.vbForm1.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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com