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

时间:2009-05-18 12:42:44

标签: c# const designer

如何在.designer.cs文件中引用常量字符串?

直接的答案是在我的.cs文件中创建一个私有字符串变量,然后编辑designer.cs文件以使用此变量而不是对字符串进行硬编码。但设计师不喜欢这样会抛出错误。我理解为什么这不起作用,但我不确定最好的选择是什么。

如果我的每个UI控件都只有文本作为占位符,那么我只需要在运行时覆盖所有文本属性?这样我就失去了在设计师中看到一切的好处。

我只想弄清楚如果事情在未来发生变化时如何造成最小的破坏。感谢。

4 个答案:

答案 0 :(得分:5)

*.designer.*文件由Visual Studio生成。除非您真的需要,否则您根本不想手动修改它们,因为Visual Studio有时可能重新 - 生成它们并删除您的更改。

您真正需要做的是将您的常量字符串视为您希望表单设计器可用的资源,以便在生成代码时使用该资源。

在Visual Studio中有几种方法可以实现此目的。最简单的可能是通过控件的数据绑定。要演示,请在表单上放置标签控件并查看控件的属性。如果按名称对属性进行排序,则括号中的列表顶部将有两个属性:ApplicationSettingsDataBindings。如果你将它们拉下来,你会发现它们都有选项可以绑定到你标签的Text属性。使用这些,您可以将“常量字符串”放在应用程序的设置文件中,并通过ApplicationSettings属性或任何数据源绑定它,并通过DataBindings属性绑定它。然后表单设计者将为您生成适当的代码。

答案 1 :(得分:4)

我并不完全清楚你想要实现的目标,但通常如果你想避免将字符串全部硬编码到设计器.cs文件中,你可以使用一个资源文件,从中加载字符串在启动时。

如果您将表单的“localizable”属性设置为“true”,我相信一切都会自动结束。另一方面,我远不是Windows Forms的专家,所以在你工作之前要把所有这些都拿来一点盐。)

答案 2 :(得分:2)

你的第二种方法是最好的选择。因为你不能认为设计师总是会保持你的变化,而且往往只会把它们吹走。您将要在Page_Init事件方法中进行控制更改。这可能允许您的更改显示在设计器中。

http://msdn.microsoft.com/en-us/library/system.web.ui.control.init.aspx

通过这种方式,您可以在您控制的实际代码隐藏类中保持常量,并且控件将以您希望的方式启动,您可以控制要更改的内容。

更新:抱歉没有意识到这是WinForms。它实际上在WinForms中更容易,因为你只需在调用控件初始化后立即在构造函数中注册控件。

答案 3 :(得分:1)

你想解决什么问题?如果您正在尝试实现本地化,请查看.NET和sattelite程序集附带的本地化功能。

如果您正在尝试解决自定义问题,请使用设置编辑器查看.NET中提供的自定义选项。

为什么需要使用常量字符串?