Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在设计模式下进行编辑时,designer.vb文件中的自定义代码将消失_C#_Vb.net_Winforms_Controls_Designer - Fatal编程技术网

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

C# 在设计模式下进行编辑时,designer.vb文件中的自定义代码将消失,c#,vb.net,winforms,controls,designer,C#,Vb.net,Winforms,Controls,Designer,我在vb.net中有一个名为“form1”的表单。此窗体有许多控件。我打开form1.designer.vb文件并输入if-else表达式,例如: 如果getLanguage()=“en”,则label1.text=“早上好”否则label1.text=“你好” 这在运行时工作得非常好 如果我在Design中打开Form1.vb[Design]页面并进行任何更改,上述代码将消失 有没有一种方法可以保留我在设计器页面中输入的任何代码? 我不想将它们放在form1.vb文件的load事件中。desi

我在vb.net中有一个名为“form1”的表单。此窗体有许多控件。我打开form1.designer.vb文件并输入if-else表达式,例如:

如果getLanguage()=“en”,则label1.text=“早上好”否则label1.text=“你好”

这在运行时工作得非常好

如果我在Design中打开Form1.vb[Design]页面并进行任何更改,上述代码将消失

有没有一种方法可以保留我在设计器页面中输入的任何代码?
我不想将它们放在form1.vb文件的load事件中。

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

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

对于您的示例,最好使用表单的属性

.Localizable = true
.Language = Default(French)/English/or others
Visual Studio创建一个类的两个文件(这是您的表单)-
因此,在哪个文件中编写代码并不重要。
只有visual studio使用
designer.vb
文件来生成设计器所做的表单更改

来自designer.vb的代码包含在构造函数中执行的方法InitializeComponent
创建您自己的方法,并在构造函数中的
InitializeComponent
之后立即调用它。
或者,如果您不想将第三个文件放入
yourform.vb

文件
yourForm.MyDesigner.vb

“不再需要使用关键字Partial,
'因为它在'yourForm.Designer.vb'中使用
公共类表单
公共子标签()
如果getLanguage()=“en”,则
label1.text=“早上好”
其他的
label1.Text=“你好”
如果结束
端接头
末级

对于您的示例,最好使用表单的属性

.Localizable = true
.Language = Default(French)/English/or others
Visual Studio创建一个类的两个文件(这是您的表单)-
因此,在哪个文件中编写代码并不重要。
只有visual studio使用
designer.vb
文件来生成设计器所做的表单更改

来自designer.vb的代码包含在构造函数中执行的方法InitializeComponent
创建您自己的方法,并在构造函数中的
InitializeComponent
之后立即调用它。
或者,如果您不想将第三个文件放入
yourform.vb

文件
yourForm.MyDesigner.vb

“不再需要使用关键字Partial,
'因为它在'yourForm.Designer.vb'中使用
公共类表单
公共子标签()
如果getLanguage()=“en”,则
label1.text=“早上好”
其他的
label1.Text=“你好”
如果结束
端接头
末级
查找此代码:

    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
  • 然后编辑每个控件文本:在按钮中写“你好”,在标签中写“早上好”,在菜单项中写“因为我很高兴”,等等
  • 然后再次更改语言,选择法语
  • 然后再次编辑每个控件,并写下“你好”、“我想你的生日快乐”、“我的生日快乐”是的您已经丢失了上一篇文章,但是要有信心
  • 编译您的项目而不启动它,您将看到IDE已经创建了两个新文件:
    Form1.en.resx
    Form1.fr.resx
    (大约)以及
    Form1.vb
    Form1.Designer.vb
    。不要编辑它们
如果打开en.resx或fr.resx,您将看到您所做的编辑在那里。这些文件用于存储表单的内置语言相关资源。这就是所谓的全球化

然后再次找到表单的构造函数

    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
瞧!我知道我说过您不必费心编写代码,但是构造函数中的上述位足以处理语言的选择。加上代码superflu aprèsça.

查找此代码:

    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
  • 然后编辑每个控件文本:在按钮中写“你好”,在标签中写“早上好”,在菜单项中写“因为我很高兴”,等等
  • 然后再次更改语言,选择法语
  • 然后再次编辑每个控件,并写下“你好”、“我想你的生日快乐”、“我的生日快乐”是的您丢失了上一篇文章,但是要有信心