簡(jiǎn)介
.NET Framework 2.0 允許您創(chuàng)建和訪問(wèn)在各應(yīng)用程序執(zhí)行會(huì)話之間保持的值。這些值稱為設(shè)置。設(shè)置可以表示用戶首選項(xiàng),也可表示應(yīng)用程序需要使用的寶貴信息。例如,可以創(chuàng)建一系列設(shè)置來(lái)存儲(chǔ)應(yīng)用程序配色方案的用戶首選項(xiàng)。也可以存儲(chǔ)指定應(yīng)用程序所使用數(shù)據(jù)庫(kù)的連接字符串。通過(guò)設(shè)置不但可以保持對(duì)于代碼外部的應(yīng)用程序至關(guān)重要的信息,而且還可以創(chuàng)建分別存儲(chǔ)各用戶首選項(xiàng)的配置文件。
Visual Basic 2005 使用 My 命名空間提供了一種顯而易見(jiàn)的設(shè)置訪問(wèn)機(jī)制,而在 Visual C# 2005 中沒(méi)有類似的命名空間,因而訪問(wèn)設(shè)置稍微要困難一些。盡管如此,C# 用戶仍可通過(guò)訪問(wèn) Properties 命名空間來(lái)使用設(shè)置。在閱讀本文的過(guò)程中,您將會(huì)了解應(yīng)用程序設(shè)置與用戶設(shè)置之間的差異、如何在設(shè)計(jì)時(shí)創(chuàng)建新的設(shè)置、如何在運(yùn)行時(shí)訪問(wèn)設(shè)置,以及如何將多組設(shè)置合并到應(yīng)用程序中。
應(yīng)用程序及用戶設(shè)置
設(shè)置具有四個(gè)屬性:
• |
Name(名稱):設(shè)置的“Name”(名稱)屬性是指用于在運(yùn)行時(shí)訪問(wèn)設(shè)置值的名稱。
|
• |
Type(類型):設(shè)置的“Type”(類型)是指設(shè)置所表示的 .NET Framework 類型。設(shè)置可以是任意類型。例如,存放用戶顏色首選項(xiàng)的設(shè)置將會(huì)是 System.Color 類型。
|
• |
Scope(作用域):“Scope”(作用域)屬性表示如何在運(yùn)行時(shí)訪問(wèn)設(shè)置。“Scope”(作用域)屬性有兩個(gè)可能的值:“Application”(應(yīng)用程序)和“User”(用戶)。本部分將會(huì)對(duì)這些值進(jìn)行更多討論。
|
• |
Value(值):“Value”(值)屬性表示訪問(wèn)設(shè)置時(shí)返回的值。該值將為“Type”(類型)屬性所表示的類型。
|
這些屬性中的大多數(shù)都相當(dāng)容易理解。“Name”(名稱)、“Type”(類型)和“Value”(值)的概念均應(yīng)為大多數(shù)程序員所熟知。“Scope”(作用域)屬性需要稍加說(shuō)明。設(shè)置具有兩個(gè)可能的作用域:應(yīng)用程序作用域和用戶作用域。具有應(yīng)用程序作用域的設(shè)置表示無(wú)論用戶首選項(xiàng)為何應(yīng)用程序都會(huì)使用的設(shè)置,而具有用戶作用域的設(shè)置對(duì)實(shí)際應(yīng)用程序來(lái)說(shuō)通常并不是很重要,它們很可能與首選項(xiàng)或其他非關(guān)鍵值關(guān)聯(lián)。
應(yīng)用程序作用域設(shè)置與用戶作用域設(shè)置之間的重要區(qū)別是,用戶作用域設(shè)置在運(yùn)行時(shí)為讀/寫(xiě),并且可在代碼中對(duì)其值進(jìn)行更改和保存。應(yīng)用程序作用域設(shè)置在運(yùn)行時(shí)為只讀。雖然可以讀取,但是不能對(duì)其進(jìn)行寫(xiě)入。具有應(yīng)用程序作用域的設(shè)置只能在設(shè)計(jì)時(shí)或通過(guò)手動(dòng)修改設(shè)置文件進(jìn)行更改。
在設(shè)計(jì)時(shí)創(chuàng)建新設(shè)置
可以使用設(shè)置設(shè)計(jì)器在設(shè)計(jì)時(shí)創(chuàng)建新的設(shè)置。設(shè)置設(shè)計(jì)器采用了大家熟悉的網(wǎng)格式界面,通過(guò)它可以創(chuàng)建新設(shè)置并指定這些設(shè)置的屬性。必須為每個(gè)新設(shè)置指定“Name”(名稱)、“Type”(類型)、“Scope”(作用域)和“Value”(值)。創(chuàng)建了設(shè)置后,即可使用本文稍后介紹的機(jī)制在代碼中對(duì)其進(jìn)行評(píng)估。
在設(shè)計(jì)時(shí)創(chuàng)建新設(shè)置的步驟
• |
在“Solution Explorer”(解決方案資源管理器)中,展開(kāi)項(xiàng)目的“Properties”(屬性)節(jié)點(diǎn)。
|
• |
在“Solution Explorer”(解決方案資源管理器)中,雙擊要在其中添加新設(shè)置的 .settings 文件。此文件的默認(rèn)名稱是 Settings.settings。
|
• |
在設(shè)置設(shè)計(jì)器中,為設(shè)置設(shè)定“Name”(名稱)、“Type”(類型)、“Scope”(作用域)和“Value”(值)。每行代表單個(gè)設(shè)置。圖 1 給出了一個(gè)設(shè)置設(shè)計(jì)器示例。
|
圖 1. Visual Studio 2005 中的設(shè)置設(shè)計(jì)器
在設(shè)計(jì)時(shí)更改現(xiàn)有設(shè)置的值
還可以按以下步驟所述,使用設(shè)置設(shè)計(jì)器在設(shè)計(jì)時(shí)更改預(yù)先存在設(shè)置的值:
在設(shè)計(jì)時(shí)更改現(xiàn)有設(shè)置值的步驟
• |
在“Solution Explorer”(解決方案資源管理器)中,展開(kāi)項(xiàng)目的“Properties”(屬性)節(jié)點(diǎn)。
|
• |
在“Solution Explorer”(解決方案資源管理器)中,雙擊要在其中添加新設(shè)置的 .settings 文件。此文件的默認(rèn)名稱是 Settings.settings。
|
• |
在設(shè)置設(shè)計(jì)器中,找到要更改的設(shè)置,然后在“Value”(值)列中鍵入新值。
|
在應(yīng)用程序會(huì)話之間更改設(shè)置值
有時(shí),在編譯和部署了應(yīng)用程序后,可能需要在應(yīng)用程序會(huì)話之間更改設(shè)置值。例如,可能需要更改連接字符串,使其指向正確的數(shù)據(jù)庫(kù)位置。由于設(shè)計(jì)時(shí)工具在應(yīng)用程序編譯和部署后不可用,所以必須手動(dòng)在文件中更改設(shè)置值。
在應(yīng)用程序會(huì)話間更改設(shè)置值的步驟
• |
使用 Microsoft 記事本或其他某種文本或 XML 編輯器,打開(kāi)與應(yīng)用程序關(guān)聯(lián)的 <AssemblyName>.exe.config 文件。
|
• |
找到要更改的設(shè)置條目。它應(yīng)看似以下示例:
<setting name="Setting" serializeAs="String">
<value>這是設(shè)置值</value>
</setting>
|
• |
為設(shè)置鍵入新值,然后保存該文件。
|
在運(yùn)行時(shí)使用設(shè)置
運(yùn)行時(shí)應(yīng)用程序可以通過(guò)代碼使用設(shè)置。具有應(yīng)用程序作用域的設(shè)置值能夠以只讀方式進(jìn)行訪問(wèn),而用戶作用域設(shè)置的值可以進(jìn)行讀寫(xiě)。在 C# 中可以通過(guò) Properties 命名空間使用設(shè)置。
在運(yùn)行時(shí)讀取設(shè)置
可在運(yùn)行時(shí)使用 Properties 命名空間讀取應(yīng)用程序作用域及用戶作用域設(shè)置。Properties 命名空間通過(guò)Properties.Settings.Default 對(duì)象公開(kāi)了項(xiàng)目的所有默認(rèn)設(shè)置。編寫(xiě)使用設(shè)置的代碼時(shí),所有設(shè)置都會(huì)出現(xiàn)在 IntelliSense 中并且被強(qiáng)類型化。因此,舉例來(lái)說(shuō),如果設(shè)置的類型為 System.Drawing.Color,則無(wú)需先對(duì)其進(jìn)行強(qiáng)制類型轉(zhuǎn)換即可使用該設(shè)置,如下例所示:
this.BackColor = Properties.Settings.Default.myColor;
在運(yùn)行時(shí)保存用戶設(shè)置
應(yīng)用程序作用域設(shè)置是只讀的,只能在設(shè)計(jì)時(shí)或通過(guò)在應(yīng)用程序會(huì)話之間修改 <AssemblyName>.exe.config 文件來(lái)進(jìn)行更改。然而,用戶作用域設(shè)置卻可以在運(yùn)行時(shí)進(jìn)行寫(xiě)入,就像更改任何屬性值那樣。新值會(huì)在應(yīng)用程序會(huì)話持續(xù)期間一直保持下去。可以通過(guò)調(diào)用 Settings.Save 方法來(lái)保持在應(yīng)用程序會(huì)話之間對(duì)用戶設(shè)置所做的更改。這些設(shè)置保存在 User.config 文件中。
在運(yùn)行時(shí)寫(xiě)入和保持用戶設(shè)置的步驟
• |
訪問(wèn)用戶設(shè)置并為其分配新值,如下例所示:
Properties.Settings.Default.myColor = Color.AliceBlue;
|
• |
如果要保持在應(yīng)用程序會(huì)話之間對(duì)用戶設(shè)置所做的更改,請(qǐng)調(diào)用 Save 方法,如以下代碼所示:
Properties.Settings.Default.Save();
|
交替使用多組設(shè)置
在某些情況下,可能需要在應(yīng)用程序中使用多組設(shè)置。例如,如果正在開(kāi)發(fā)的應(yīng)用程序中有某組設(shè)置預(yù)計(jì)會(huì)頻繁進(jìn)行更改,則比較明智的做法是將其全都分成單個(gè)文件,這樣便可成批替換相應(yīng)文件,而不會(huì)使其他設(shè)置受到影響。Visual Studio 2005 允許向項(xiàng)目中添加多組設(shè)置。可以通過(guò)各自節(jié)點(diǎn)中生成的設(shè)置對(duì)象來(lái)訪問(wèn)各組附加設(shè)置。例如,如果向項(xiàng)目中添加了名為 SpecialSettings 的一組設(shè)置,則要通過(guò)Properties.SpecialSettings 對(duì)象來(lái)訪問(wèn)該組設(shè)置包含在代碼中的設(shè)置。
添加附加設(shè)置組的步驟
• |
從“Project”(項(xiàng)目)菜單中選擇“Add New Item”(添加新項(xiàng))。將會(huì)打開(kāi)“Add New Item”(添加新項(xiàng))對(duì)話框。
|
• |
在“Add New Item”(添加新項(xiàng))對(duì)話框中,選擇“Settings File”(設(shè)置文件)。
|
• |
在“Name”(名稱)框中為設(shè)置文件命名,如 SpecialSettings.settings,然后單擊“Add”(添加),將文件添加到解決方案中。
|
• |
在“Solution Explorer”(解決方案資源管理器)中,將新的設(shè)置文件拖入到 Properties 文件夾中。這樣便可在代碼中使用新的設(shè)置。
|
• |
如在其他任何設(shè)置文件中那樣在此文件中添加和使用設(shè)置。可通過(guò) Properties.SpecialSettings 對(duì)象訪問(wèn)此組設(shè)置。
|
結(jié)束語(yǔ)
在本文中,您已了解如何在 C# 應(yīng)用程序中使用設(shè)置來(lái)存儲(chǔ)和管理從屬于應(yīng)用程序和用戶的設(shè)置。您還學(xué)會(huì)了如何在設(shè)計(jì)時(shí)添加設(shè)置、如何在運(yùn)行時(shí)讀寫(xiě)設(shè)置,以及如何將多組附加設(shè)置合并到應(yīng)用程序中。