Visual Basic 2005 使用 My 命名空间提供了一种显而易见的设置访问机制,而在 Visual C# 2005 中没有类似的命名空间,因而访问设置稍微要困难一些。尽管如此,C# 用户仍可通过访问 Properties 命名空间来使用设置。在阅读本文的过程中,您将会了解应用程序设置与用户设置之间的差异、如何在设计时创建新的设置、如何在运行时访问设置,以及如何将多组设置合并到应用程序中。
应用程序及用户设置
设置具有四个属性:
• | Name(名称):设置的“Name”(名称)属性是指用于在运行时访问设置值的名称。 |
• | Type(类型):设置的“Type”(类型)是指设置所表示的 .NET Framework 类型。设置可以是任意类型。例如,存放用户颜色首选项的设置将会是 System.Color 类型。 |
• | Scope(作用域):“Scope”(作用域)属性表示如何在运行时访问设置。“Scope”(作用域)属性有两个可能的值:“Application”(应用程序)和“User”(用户)。本部分将会对这些值进行更多讨论。 |
• | Value(值):“Value”(值)属性表示访问设置时返回的值。该值将为“Type”(类型)属性所表示的类型。 |
这些属性中的大多数都相当容易理解。“Name”(名称)、“Type”(类型)和“Value”(值)的概念均应为大多数程序员所熟知。“Scope”(作用域)属性需要稍加说明。设置具有两个可能的作用域:应用程序作用域和用户作用域。具有应用程序作用域的设置表示无论用户首选项为何应用程序都会使用的设置,而具有用户作用域的设置对实际应用程序来说通常并不是很重要,它们很可能与首选项或其他非关键值关联。
应用程序作用域设置与用户作用域设置之间的重要区别是,用户作用域设置在运行时为读/写,并且可在代码中对其值进行更改和保存。应用程序作用域设置在运行时为只读。虽然可以读取,但是不能对其进行写入。具有应用程序作用域的设置只能在设计时或通过手动修改设置文件进行更改。
在设计时创建新设置
可以使用设置设计器在设计时创建新的设置。设置设计器采用了大家熟悉的网格式界面,通过它可以创建新设置并指定这些设置的属性。必须为每个新设置指定“Name”(名称)、“Type”(类型)、“Scope”(作用域)和“Value”(值)。创建了设置后,即可使用本文稍后介绍的机制在代码中对其进行评估。
在设计时创建新设置的步骤
• | 在“Solution Explorer”(解决方案资源管理器)中,展开项目的“Properties”(属性)节点。 |
• | 在“Solution Explorer”(解决方案资源管理器)中,双击要在其中添加新设置的 .settings 文件。此文件的默认名称是 Settings.settings。 |
• | 在设置设计器中,为设置设定“Name”(名称)、“Type”(类型)、“Scope”(作用域)和“Value”(值)。每行代表单个设置。图 1 给出了一个设置设计器示例。 |
图 1. Visual Studio 2005 中的设置设计器
在设计时更改现有设置的值
还可以按以下步骤所述,使用设置设计器在设计时更改预先存在设置的值:
在设计时更改现有设置值的步骤
• | 在“Solution Explorer”(解决方案资源管理器)中,展开项目的“Properties”(属性)节点。 |
• | 在“Solution Explorer”(解决方案资源管理器)中,双击要在其中添加新设置的 .settings 文件。此文件的默认名称是 Settings.settings。 |
• | 在设置设计器中,找到要更改的设置,然后在“Value”(值)列中键入新值。 |
在应用程序会话之间更改设置值
有时,在编译和部署了应用程序后,可能需要在应用程序会话之间更改设置值。例如,可能需要更改连接字符串,使其指向正确的数据库位置。由于设计时工具在应用程序编译和部署后不可用,所以必须手动在文件中更改设置值。
在应用程序会话间更改设置值的步骤
• | 使用 Microsoft 记事本或其他某种文本或 XML 编辑器,打开与应用程序关联的 <AssemblyName>.exe.config 文件。 |
• | 找到要更改的设置条目。它应看似以下示例: <setting name="Setting" serializeAs="String"> <value>这是设置值</value> </setting> |
• | 为设置键入新值,然后保存该文件。 |
在运行时使用设置
运行时应用程序可以通过代码使用设置。具有应用程序作用域的设置值能够以只读方式进行访问,而用户作用域设置的值可以进行读写。在 C# 中可以通过 Properties 命名空间使用设置。
在运行时读取设置
可在运行时使用 Properties 命名空间读取应用程序作用域及用户作用域设置。Properties 命名空间通过Properties.Settings.Default 对象公开了项目的所有默认设置。编写使用设置的代码时,所有设置都会出现在 IntelliSense 中并且被强类型化。因此,举例来说,如果设置的类型为 System.Drawing.Color,则无需先对其进行强制类型转换即可使用该设置,如下例所示:
this.BackColor = Properties.Settings.Default.myColor;
在运行时保存用户设置
应用程序作用域设置是只读的,只能在设计时或通过在应用程序会话之间修改 <AssemblyName>.exe.config 文件来进行更改。然而,用户作用域设置却可以在运行时进行写入,就像更改任何属性值那样。新值会在应用程序会话持续期间一直保持下去。可以通过调用 Settings.Save 方法来保持在应用程序会话之间对用户设置所做的更改。这些设置保存在 User.config 文件中。
在运行时写入和保持用户设置的步骤
• | 访问用户设置并为其分配新值,如下例所示: Properties.Settings.Default.myColor = Color.AliceBlue; |
• | 如果要保持在应用程序会话之间对用户设置所做的更改,请调用 Save 方法,如以下代码所示: Properties.Settings.Default.Save(); |
交替使用多组设置
在某些情况下,可能需要在应用程序中使用多组设置。例如,如果正在开发的应用程序中有某组设置预计会频繁进行更改,则比较明智的做法是将其全都分成单个文件,这样便可成批替换相应文件,而不会使其他设置受到影响。Visual Studio 2005 允许向项目中添加多组设置。可以通过各自节点中生成的设置对象来访问各组附加设置。例如,如果向项目中添加了名为 SpecialSettings 的一组设置,则要通过Properties.SpecialSettings 对象来访问该组设置包含在代码中的设置。
添加附加设置组的步骤
• | 从“Project”(项目)菜单中选择“Add New Item”(添加新项)。将会打开“Add New Item”(添加新项)对话框。 |
• | 在“Add New Item”(添加新项)对话框中,选择“Settings File”(设置文件)。 |
• | 在“Name”(名称)框中为设置文件命名,如 SpecialSettings.settings,然后单击“Add”(添加),将文件添加到解决方案中。 |
• | 在“Solution Explorer”(解决方案资源管理器)中,将新的设置文件拖入到 Properties 文件夹中。这样便可在代码中使用新的设置。 |
• | 如在其他任何设置文件中那样在此文件中添加和使用设置。可通过 Properties.SpecialSettings 对象访问此组设置。 |