在 Project Properties 內可以找到 Setting.settings 檔案
點擊 Setting.settings 可以開啟 [設定] 頁面,分別輸入 Title、BGColor、LocationX、LocationY 和 BindingText 這 5 個設定值,各設定值用途
- Title:Form.Text 使用
- BGColor:使用者挑選顏色,並在 PictureBox 內顯示
- LocationX 和 LocationY:紀錄 Form 最後的位置
- BindingText:直接綁定 TextBox.Text Property
範圍有應用程式 (Application) 和使用者 (User) 兩種
- 應用程式:唯讀,無法進行修改,設定值會存放在 App.Config 內的 <applicationSettings> 區段
- 使用者:可讀寫,設定值會存放在 App.config 內的 <userSettings> 區段
設定完成後,可以在 app.Config 內看見相關設定
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="ConfigSample.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="ConfigSample.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<userSettings>
<ConfigSample.Properties.Settings>
<setting name="BGColor" serializeAs="String">
<value />
</setting>
<setting name="LocationX" serializeAs="String">
<value>0</value>
</setting>
<setting name="LocationY" serializeAs="String">
<value>0</value>
</setting>
<setting name="BindingText" serializeAs="String">
<value>控件綁定</value>
</setting>
</ConfigSample.Properties.Settings>
</userSettings>
<applicationSettings>
<ConfigSample.Properties.Settings>
<setting name="Title" serializeAs="String">
<value>[C#] 應用程式設定檔 - Settings.settngs</value>
</setting>
</ConfigSample.Properties.Settings>
</applicationSettings>
</configuration>
C# Code 來進行讀取、設定和儲存
- Load Event:載入設定值
- FormClosing Event:儲存設定值
using System;
using System.Drawing;
using System.Windows.Forms;
namespace ConfigSample
{
public partial class SettingSample : Form
{
public SettingSample()
{
InitializeComponent();
FormClosing += SettingSample_FormClosing;
btnColorDialog.Click += BtnColorDialog_Click;
}
private void SettingSample_Load(object sender, EventArgs e)
{
this.Text = Properties.Settings.Default.Title;
this.pbBGColor.BackColor = Properties.Settings.Default.BGColor;
this.Location = new Point(Properties.Settings.Default.LocationX, Properties.Settings.Default.LocationY);
}
private void SettingSample_FormClosing(object sender, FormClosingEventArgs e)
{
// 無法指派為屬性或索引子 'Settings.Title'-- 其為唯讀
// Properties.Settings.Default.Title = "範圍:應用程式 (Application) 為唯讀狀態,無法更改";
Properties.Settings.Default.BGColor = this.pbBGColor.BackColor;
Properties.Settings.Default.LocationX = this.Location.X;
Properties.Settings.Default.LocationY = this.Location.Y;
Properties.Settings.Default.Save();
}
private void BtnColorDialog_Click(object sender, EventArgs e)
{
ColorDialog cd = new ColorDialog();
if (cd.ShowDialog() != DialogResult.OK)
{
pbBGColor.BackColor = Color.Empty;
return;
}
pbBGColor.BackColor = cd.Color;
}
}
}
故意改變範圍為應用程式 (Application) 的 Title 設定值,馬上就會出現錯誤訊息,如下圖
控件 TextBox 直接綁定 BindingText 設定值
TextBox => ApplicationSettings => PropertyBinding
使用者設定值
實際執行後,會發現執行檔的 exe.config 檔案內容不會改變,該檔案是設定預設值,使用者對於 Settings.setting 變化,都會儲存在 C:\Users\使用者\AppData\Local\ProjectName 內
打開 user.config xml 檔案內就可以看見使用者變化設定
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<userSettings>
<ConfigSample.Properties.Settings>
<setting name="BGColor" serializeAs="String">
<value>Purple</value>
</setting>
<setting name="LocationX" serializeAs="String">
<value>810</value>
</setting>
<setting name="LocationY" serializeAs="String">
<value>179</value>
</setting>
<setting name="BindingText" serializeAs="String">
<value>控件綁定 - 修正</value>
</setting>
</ConfigSample.Properties.Settings>
</userSettings>
</configuration>
且 user.config 是根據版本號,版本號不同的話,user.config 也不同
執行結果
- 參考資料
- Using Application Settings and User Settings
- 組態設定
- [C#.NET][VB.NET] 應用程式組態設定檔 / Application Configurable File (一)、(二)
- C# Tutorial - Save TextBox Label and CheckBox in User Settings
- [WinForm] 記住程式視窗的最後位置和其它偏好設定
沒有留言:
張貼留言