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

标签 c# vb.net winforms controls designer

我在 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/

相关文章:

c# - "async await "怎么理解

c# - 如何保存一个值以便稍后返回?

c# - 如何在行选择中保留带有 "Checking"复选框的 C# Listview 控件?

c# - 在 C# 中创建比表单大的 map

使用 xval 的 C# mvc2 客户端表单验证,防止发布

c# - 正确的连接字符串语法

c# - vb.net至C#代码转换

vb.net - 当将对象名称作为字符串传递时,如何动态创建对象的实例? (VB.NET)

c# - 如何使用 SqlDataSource 处理异常

c# - 后台全局 SQL 连接