2013年9月11日 星期三

[轉貼] 簡單好用的組態設定 Settings.settngs

出處:http://rely1020.blog.ithome.com.tw/post/1606/24838

工作上的須要,想為應用程式加上參數/設定/組態為初始化或執行模式選擇。
正好發現了 Settings.settings 這個新東西,應是VS2005以後才開始支援。對本人來說是新東西。
 
目的:使用設定檔為程式做初始化或處理參數選擇用。
 
Solution:
使用 Settings.settings 設定檔。 
 
 技術說明:
Settings.settings 的資料可以與 Control 元件 binding 在一起,省了設定維護的碼。
Properties.Settings.Default.Save(); /// 存入設定檔
Properties.Settings.Default.Reset(); /// 重設設定資料
Properties.Settings.Default.Reload(); /// 自設定檔取資料
Properties.Settings.Default.<FiledName> /// 取用/設定欄位資料。
 
Settings.settings 的設定其實最終還是存入App.config 這個XML組態檔。 
 
下面是本人實戰原碼。 
 下圖一:這是本人實際用的畫面。這是完成圖。每個 TextBox 都是設定資料。 還可以Reload, Reset, Save 。
 
 
步驟一:
先說明一下,本人的開發環境是 VS2005。儘量用IDE的視覺化環境來開發。
首先,增加[設定檔]Settings.settings。其實預設就有一個設定檔。
{滑鼠右鍵點選專案}->[加入]->[新增項目]->[設定檔]。
 
步驗二:
把想要的參數設定填入。如下圖二。
[方案總管]->{開啟專案檔案[Settings.settings]},將出現參數畫面,填入想要的設定值。
 
 步驟三:
 Settings.settings 的設定其實最終還是存入App.config 這個XML組態檔,如下:(看看就好不要改)
 
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="....................>
            <section name="NCCUMIS.Properties.Settings" type="................/>
        </sectionGroup>
    </configSections>
    <userSettings>
        <NCCUMIS.Properties.Settings>
            <setting name="d_nccu_id" serializeAs="String">
                <value>test_id</value>
            </setting>
            <setting name="d_file_folder" serializeAs="String">
                <value>D:\MIS_Folder_Debug\</value>
            </setting>
            <setting name="d_remoting_ip" serializeAs="String">
                <value>192.168.123.123</value>
            </setting>
            <setting name="d_db_port" serializeAs="String">
                <value>9999</value>
            </setting>
            <setting name="d_func_code" serializeAs="String">
                <value>CC0302</value>
            </setting>
            <setting name="d_role_code" serializeAs="String">
                <value>03</value>
            </setting>
        </NCCUMIS.Properties.Settings>
    </userSettings>
</configuration> 
 
步驟四:
將Settings.settings 的參數與 Control 元件的資料 binding 起來。如下圖:
{開啟Control元件(本人的例子是TextBox)的屬性畫面}->[ApplicationSettings]->[PropertyBinding]->[Text]->{選定Settings.settings參數}。有了這些binding就省了參數取與設的原碼了。 
  
 
  步驟五:配合的原碼。
本人在此例使用 Button 來觸發 Settings 的存檔、重載、重設。 
 
private void btnSaveSettings_Click(object sender, EventArgs e)
{
    Properties.Settings.Default.Save(); ///存檔
}

private void btnResetSettings_Click(object sender, EventArgs e)
{
    Properties.Settings.Default.Reset(); ///重設
}

private void btnReloadSettings_Click(object sender, EventArgs e)
{
    Properties.Settings.Default.Reload(); ///重載
}

其它:若想手動加碼存取或不想binding的話,可如下:
Settings的參數取用型式:Properties.Settings.Default.<FiledName>
下面是例子: 
 
/// 把 Settings 的 instance 先取出。 
Properties.Settings defaultSettings = Properties.Settings.Default;
/// 把 Settings參數值 填入 Control元件。  
txtFuncCode.Text = defaultSettings.d_func_code; /// d_func_code 是參數名稱。
/// 把 Control元件資料 填入 Settings參數。
defaultSettings.d_func_code = txtFuncCode.Text;

defaultSettings.Reset(); /// 重設
defaultSettings.Reload(); /// 重載
defaultSettings.Save(); /// 存檔
 
 

應用程序及用戶設置

設置具有四個屬性:
Name(名稱):設置的「Name」(名稱)屬性是指用於在運行時訪問設置值的名稱。
Type(類型):設置的「Type」(類型)是指設置所表示的 .NET Framework 類型。設置可以是任意類型。例如,存放用戶顏色首選項的設置將會是 System.Color 類型。
Scope(作用域):「Scope」(作用域)屬性表示如何在運行時訪問設置。「Scope」(作用域)屬性有兩個可能的值:「Application」(應用程序)和「User」(用戶)。本部分將會對這些值進行更多討論。
Value(值):「Value」(值)屬性表示訪問設置時返回的值。該值將為「Type」(類型)屬性所表示的類型。
這些屬性中的大多數都相當容易理解。「Name」(名稱)、「Type」(類型)和「Value」(值)的概念均應為大多數程序員所熟知。「Scope」(作用域)屬性需要稍加說明。設置具有兩個可能的作用域:應用程序作用域和用戶作用域。具有應用程序作用域的設置表示無論用戶首選項為何應用程序都會使用的設置,而具有用戶作用域的設置對實際應用程序來說通常並不是很重要,它們很可能與首選項或其他非關鍵值關聯。
應用程序作用域設置與用戶作用域設置之間的重要區別是,用戶作用域設置在運行時為讀/寫,並且可在代碼中對其值進行更改和保存。應用程序作用域設置在運行時為只讀。雖然可以讀取,但是不能對其進行寫入。具有應用程序作用域的設置只能在設計時或通過手動修改設置文件進行更改。

沒有留言:

張貼留言