我的應用程序被分成一個配置工具,它可以寫入配置和一個只讀取和使用配置設置的查看器。在兩個應用程序之間共享配置的技巧?
在這種情況下,會推薦哪些存儲屬性的技術?不同類別的XML會是一個好主意嗎?
這些應用程序正在使用C#,.NET 3.5和WinForms進行開發。
我的應用程序被分成一個配置工具,它可以寫入配置和一個只讀取和使用配置設置的查看器。在兩個應用程序之間共享配置的技巧?
在這種情況下,會推薦哪些存儲屬性的技術?不同類別的XML會是一個好主意嗎?
這些應用程序正在使用C#,.NET 3.5和WinForms進行開發。
我會有一個共享程序集,其中包含您的設置類。然後,您可以序列化/反序列化這個類來一個共同的地方在硬盤上:然後
[XmlRoot()]
public class Settings
{
private static Settings instance = new Settings();
private Settings() {}
/// <summary>
/// Access the Singleton instance
/// </summary>
[XmlElement]
public static Settings Instance
{
get
{
return instance;
}
}
/// <summary>
/// Gets or sets the height.
/// </summary>
/// <value>The height.</value>
[XmlAttribute]
public int Height { get; set; }
/// <summary>
/// Main window status (Maximized or not)
/// </summary>
[XmlAttribute]
public FormWindowState WindowState
{
get;
set;
}
/// <summary>
/// Gets or sets a value indicating whether this <see cref="Settings"/> is offline.
/// </summary>
/// <value><c>true</c> if offline; otherwise, <c>false</c>.</value>
[XmlAttribute]
public bool IsSomething
{
get;
set;
}
/// <summary>
/// Save setting into file
/// </summary>
public static void Serialize()
{
// Create the directory
if (!Directory.Exists(AppTmpFolder))
{
Directory.CreateDirectory(AppTmpFolder);
}
using (TextWriter writer = new StreamWriter(SettingsFilePath))
{
XmlSerializer serializer = new XmlSerializer(typeof(Settings));
serializer.Serialize(writer, Settings.Instance);
}
}
/// <summary>
/// Load setting from file
/// </summary>
public static void Deserialize()
{
if (!File.Exists(SettingsFilePath))
{
// Can't find saved settings, using default vales
SetDefaults();
return;
}
try
{
using (XmlReader reader = XmlReader.Create(SettingsFilePath))
{
XmlSerializer serializer = new XmlSerializer(typeof(Settings));
if (serializer.CanDeserialize(reader))
{
Settings.instance = serializer.Deserialize(reader) as Settings;
}
}
}
catch (System.Exception)
{
// Failed to load some data, leave the settings to default
SetDefaults();
}
}
}
XML文件看起來像這樣:
<?xml version="1.0" encoding="utf-8"?>
<Settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Height="738" WindowState="Maximized" IsSomething="false" >
</Settings>
XML似乎是這個的理想選擇。
在WinForms中,用戶設置通過XML持久保存,因此您擁有所有需要的類和輔助方法。
好主意,謝謝。 我該如何序列化與複選框的狀態? – Kai 2009-11-06 20:22:02
添加一個布爾屬性IsFooChecked。加載表單時,調用Settings.Instance.Deserialize(),然後將控件的Checked屬性設置爲IsFooChecked。在OnFormClosing中,將IsFooChecked設置爲複選框的Checked屬性,然後調用Settings.Instance.Serialize()。 – 2009-11-06 20:40:30
非常感謝,是否還有一種方法可以提高課程製作的準確性,而不是將所有屬性存儲在一個標籤中? – Kai 2009-11-06 21:42:30