如何在C#的designer.cs代码中使用常量字符串?

4
如何在我的.designer.cs文件中引用常量字符串?
一个简单的答案是在我的.cs文件中创建一个私有字符串变量,然后编辑designer.cs文件以使用此变量而不是硬编码字符串。但是设计师不喜欢这样做会抛出错误。我知道为什么这样做行不通,但我不确定最好的替代方案是什么。
每个UI控件是否只应该具有文本占位符,然后我需要在运行时仅覆盖所有文本属性?这样一来,我就失去了在设计师中看到所有内容的好处。
我只是想弄清楚在未来发生变化时如何造成最小的干扰。谢谢。
4个回答

6
*.designer.* 文件是由 Visual Studio 生成的。除非您确实需要,否则不要手动修改它们,因为 Visual Studio 有时可能会重新生成它们并擦除您的更改。
您真正需要做的是将您的常量字符串视为资源,以便在生成代码时,表单设计器可以使用该资源。
在 Visual Studio 中,有几种方法可以实现这一点。最简单的方法可能是通过控件的数据绑定。为了演示,请在表单上放置一个标签控件,并查看控件的属性。如果按名称对属性进行排序,列表顶部将有两个括在括号中的属性:ApplicationSettingsDataBindings。如果您下拉选择这些选项,您将看到它们都有绑定到您的标签的Text 属性的选项。使用这些选项,您可以将您的“常量字符串”放在应用程序的设置文件中,并通过ApplicationSettings 属性进行绑定,或者放在任何数据源中,并通过DataBindings 属性进行绑定。然后,表单设计器将为您生成适当的代码。

Joes是正确的,实际上你不应该手动修改设计师文件! - Enyra

4

我不完全清楚您想要实现什么,但通常如果您想避免所有字符串硬编码到设计师的 .cs 文件中,您可以使用一个资源文件,字符串将在启动时从该文件中加载。

如果您将表单的 "localizable" 属性设置为 "true",我相信所有内容都会自动进入资源。另一方面,我并不是 Windows Forms 的专家,所以在您实现它之前请谨慎考虑这些信息 :)


1
虽然我不会说自己是WinForms的新手,但按照任何合理的定义,我也不是专家。 - Jon Skeet

3
你的第二种方法是最好的选择。因为你不能假设设计师会一直保留你的更改,通常情况下它们会被覆盖掉。你需要在Page_Init事件方法中进行控制更改,这样可以让你的更改在设计师中显示出来。 http://msdn.microsoft.com/en-us/library/system.web.ui.control.init.aspx 这样你就可以将常量保存在你实际控制的代码后台类中,并按照你想要的方式初始化控件,只需控制你想要更改的内容即可。
更新:抱歉,我没有意识到这是WinForms。在WinForms中,这实际上更容易,因为你只需在构造函数中调用控件初始化后立即注册你的控件。

谢谢,但我只是使用winforms。不过一定有类似的事件处理程序。我对用户控件在设计器中的呈现方式并不是非常熟悉,但我会去看一下的。 - TheSean
实际上,您只需要在控件初始化后在构造函数中执行它。 - Nick Berardi

1
你想要解决什么问题?如果你想要实现本地化,可以查看.NET和卫星程序集提供的本地化功能。
如果你想要解决定制问题,可以查看.NET中可用的定制选项,包括设置编辑器。
为什么需要使用常量字符串?

1
我有一个带有许多按钮和菜单项的表单。根据我们产品的版本,我需要启用/禁用不同的按钮集。过去的做法是保留字符串列表(按钮名称)并使用它来检查某个按钮是否应启用/禁用。常量字符串嵌入到.designer.cs文件中,这样做虽然可行,但会使设计师无法使用。 - TheSean
如果这些字符串包含按钮的名称,那么为什么要将它们用作占位符并保持不变呢?这并没有解释清楚。 - Dave Van den Eynde

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接