如何阻止WinForms Label从.resx资源文件获取文本?
问题详情
我有一个包含若干静态控件的简单窗体,其中一个Label的Text属性会自动从.resx资源文件取值,并非我刻意设置。
窗体的InitializeComponent()方法首行代码:
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Form_WingInertiaListPrompt))
针对该问题Label的代码:
Me.Label1.Text = resources.GetString("Label1.Text")
对应的.resx资源文件内容:
<data name="Label1.Text" xml:space="preserve"> <value>New Select Critical Wing Loads data found. Would you like to automatically generate Wing Inertia cases for the critical wing cases? This will automatically populate the Case Num, Nz, and Nx fields for each load case.</value> </data>
设计器中设置的Text属性值会在运行时被.resx内容覆盖。
补充背景
该窗体是参考Stack Overflow帖子中Abdellah OUMGHAR的方法,复制项目中同类窗体得到的。新窗体中想要修改的Label.Text始终默认使用原窗体的.resx值,原窗体同样从自身.resx文件取值。仅这一个Label出现此问题,其他Label均正常显示设计器中设置的值。
已尝试的操作
卸载解决方案,手动编辑设计器文件移除Dim resource...行,并删除.resx文件中的<data>标签及其内容。加载解决方案后可在设计器中修改文本,但运行程序时手动修改会被还原,显示原.resx值。
彻底清理资源绑定代码
卸载项目,找到窗体对应的.Designer.vb文件,删除所有与ComponentResourceManager相关的代码,包括开头的声明语句和Me.Label1.Text = resources.GetString("Label1.Text")这行绑定代码;同时删除窗体对应.resx文件中所有Label1.Text相关的<data>节点,保存后重新加载项目。关闭窗体的本地化属性
在设计器中选中窗体,查看属性面板的Localizable属性,确保设置为False。如果之前开启了本地化,设计器可能会自动重新生成资源绑定代码。重置Label的Text属性
在设计器中选中Label1,清空当前Text值,输入一个临时内容(比如“测试文本”),保存后再修改为你需要的正式文本。这一步可以清除设计器中残留的资源关联标记。检查项目配置中的残留引用
打开项目的.vbproj文件,搜索Label1.Text或Form_WingInertiaListPrompt.resx相关条目,确保没有引用原窗体的resx文件或残留的资源绑定配置,若有则手动删除后保存项目。清理编译缓存
删除项目目录下的bin和obj文件夹,重新生成整个解决方案,清除编译时残留的旧资源文件。
内容的提问来源于stack exchange,提问作者AaronJasso

