Реализация AppSettings для .NET Compact Framework
Вступление
На данный момент .NET Compact Framework не содержит класс AppSettings, позволяющий сохранять настройки, как в полной версии .NET Framework, где разработчик может получить доступ к настройкам, которые хранятся в файле App.Config через класс System.Configuration.ConfigurationSettings.AppSettings. Попробуем самостоятельно создать подобную функциональность.
Пишем код
Настройки мы будем хранить в XML-файле в том же формате, как это принято в файле App.Config.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="ServerIP" value="192.168.5.22" />
<add key="UserName" value="testuser" />
<add key="Password" value="jdhs822@@*" />
<add key="PhoneNumber" value="5555555555" />
<add key="TimeOut" value="60" />
<add key="LastTransmit" value="03/03/2004 9:12:33 PM" />
<add key="DatabasePath" value="\Program Files\DB\test.sdf" />
</appSettings>
</configuration>
Назовем этот файл Settings.xml и добавим его в проект. Далее создадим новый класс Settings. Данный класс содержит только статические члены, чтобы можно было легко получить данные настроек из файла. Чтобы сразу получить значения, создадим статический конструктор, в котором будет происходить обработка XML-кода. Для начала объявим переменную m_settings типа NameValueCollection, которая будет хранить все настройки.
public class Settings
{
private static NameValueCollection m_settings;
private static string m_settingsPath;
// Static constructor
static Settings()
{
// Получим путь к файлу настроек
m_settingsPath = Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
m_settingsPath += @"\Settings.xml";
if(!File.Exists(m_settingsPath))
throw new FileNotFoundException(
m_settingsPath + " не найден.");
System.Xml.XmlDocument xdoc = new XmlDocument();
xdoc.Load(m_settingsPath);
XmlElement root = xdoc.DocumentElement;
System.Xml.XmlNodeList nodeList = root.ChildNodes.Item(0).ChildNodes;
// Добавляем настройки в NameValueCollection.
m_settings = new NameValueCollection();
m_settings.Add("ServerIP", nodeList.Item(0).Attributes["value"].Value);
m_settings.Add("UserName", nodeList.Item(1).Attributes["value"].Value);
m_settings.Add("Password", nodeList.Item(2).Attributes["value"].Value);
m_settings.Add("PhoneNumber",
nodeList.Item(3).Attributes["value"].Value);
m_settings.Add("TimeOut", nodeList.Item(4).Attributes["value"].Value);
m_settings.Add("LastTransmit",
nodeList.Item(5).Attributes["value"].Value);
m_settings.Add("DatabasePath",
nodeList.Item(6).Attributes["value"].Value);
}
}
Теперь, нам нужно создать несколько свойств для получения и установки значений в NameValueCollection.
public static string ServerIP
{
get { return m_settings.Get("ServerIP"); }
set { m_settings.Set("ServerIP", value); }
}
public static string UserName
{
get { return m_settings.Get("UserName"); }
set { m_settings.Set("UserName", value); }
}
// ... и так далее
После того, как мы заведем новые настройки, необходимо сохранить их в файле. Для этого добавим в класс еще один метод Update(). Класс XmlTextWriter позволяет легко записать xml-код в FileStream. Проходим через все значения NameValueCollection и сохраняем значения настроек в xml-файле.
public static void Update()
{
XmlTextWriter tw = new XmlTextWriter(m_settingsPath,
System.Text.UTF8Encoding.UTF8);
tw.WriteStartDocument();
tw.WriteStartElement("configuration");
tw.WriteStartElement("appSettings");
for(int i=0; i < m_settings.Count; ++i)
{
tw.WriteStartElement("add");
tw.WriteStartAttribute("key", string.Empty);
tw.WriteRaw(m_settings.GetKey(i));
tw.WriteEndAttribute();
tw.WriteStartAttribute("value", string.Empty);
tw.WriteRaw(m_settings.Get(i));
tw.WriteEndAttribute();
tw.WriteEndElement();
}
tw.WriteEndElement();
tw.WriteEndElement();
tw.Close();
}
Теперь мы можем легко сохранять и извлекать пользовательские настройки. Очень часто извлечение значений настроек происходит при загрузке приложения, а сохранение при закрытии.
private void MainForm_Load(object sender, EventArgs e)
{
textBox1.Text = Settings.UserName;
}
private void MainForm_Closed(object sender, EventArgs e)
{
Settings.UserName = textBox1.Text;
Settings.Update(); // сохраняем новые настройки в файле
}
Скачать пример
Источник: http://www.codeproject.com/KB/mobile/SaveSettings.aspx
Перевод: Александр Климов
Реклама
модульная мебель для детской комнаты, рейтинг статья; Оптовый склад в Москве, отличный способ формирования корпоративного стиля купить одежду оптом .

