C# 在设计模式下进行编辑时,designer.vb文件中的自定义代码将消失
我在vb.net中有一个名为“form1”的表单。此窗体有许多控件。我打开form1.designer.vb文件并输入if-else表达式,例如: 如果getLanguage()=“en”,则label1.text=“早上好”否则label1.text=“你好” 这在运行时工作得非常好 如果我在Design中打开Form1.vb[Design]页面并进行任何更改,上述代码将消失 有没有一种方法可以保留我在设计器页面中输入的任何代码?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
我不想将它们放在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
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
- 然后编辑每个控件文本:在按钮中写“你好”,在标签中写“早上好”,在菜单项中写“因为我很高兴”,等等
- 然后再次更改语言,选择法语
- 然后再次编辑每个控件,并写下“你好”、“我想你的生日快乐”、“我的生日快乐”是的您丢失了上一篇文章,但是要有信心