首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在设计模式下编辑时,designer.vb文件中的自定义代码就会消失。

在设计模式下编辑时,designer.vb文件中的自定义代码就会消失。
EN

Stack Overflow用户
提问于 2014-11-18 18:18:36
回答 3查看 1.6K关注 0票数 1

我在vb.net中有一个名为"form1“的表单。此窗体有许多控件。我打开了form1.designer.vb文件并放入了一个if其他表达式,如:

如果getLanguage() = "en“,则标记为1.text=”早安“,否则标记为1.Text= "Bonjour”。

这在运行时非常好。

如果我在设计中打开Form1.vbDesign页面并进行任何更改,那么上面的代码就会消失。

有什么方法可以让我在设计页面中保存任何代码吗?我不想把它们放在form1.vb文件中的load事件中。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-18 21:17:36

找到以下代码:

代码语言:javascript
运行
复制
    Public Sub New()
        Me.InitializeComponent()
    End Sub

然后添加一行:

代码语言:javascript
运行
复制
    Public Sub New()
        Me.InitializeComponent()
        Me.MakeComponentsChanges()
    End Sub

然后在form1.vb或创建的另一个部分类副本中创建方法:

代码语言:javascript
运行
复制
    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
  • 然后编辑你的每个控件文本:在一个按钮中写"Hello“,在标签中写”早安“,在MenuItem中写”因为我很快乐“等等。
  • 然后再次更改语言,选择French
  • 然后再编辑每个控件并写出"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相关资源。这就是所谓的全球化。

然后再次定位表单的构造函数。

代码语言:javascript
运行
复制
    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

不要忘记在类声明的顶部添加这两个名称空间:

代码语言:javascript
运行
复制
Imports System.Globalization
Imports System.Threading

还有哇哦!我知道我说过不必费心编写代码,但构造函数中的上述部分足以处理语言的选择。再加上贝索恩·德·塔帕杜编码的超级流感。

票数 2
EN

Stack Overflow用户

发布于 2014-11-18 20:34:04

对于您的例子,最好是使用窗体的属性。

代码语言:javascript
运行
复制
.Localizable = true
.Language = Default(French)/English/or others

Visual创建一个类的两个文件(这是您的表单)- 部分类

因此,在哪个文件中编写代码并不重要。

只有visual studio使用designer.vb文件生成由设计器进行的表单更改。

designer.vb中的代码包含在构造函数中执行的方法InitializeComponent

创建自己的方法,并在构造函数中的InitializeComponent之后立即调用它。

或者为您的代码创建第三个文件,如果您不想放入yourform.vb

文件yourForm.MyDesigner.vb

代码语言:javascript
运行
复制
'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
票数 2
EN

Stack Overflow用户

发布于 2014-11-18 18:57:48

designer.vb文件由Visual自动创建。每次编辑表单的设计时,都会重写该文件。那么,为什么您不想加载这些代码呢?load事件或构造函数(如前所述)是放置所需初始化的正确位置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27001210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档