Как сохранять настройки окна? - C#
Формулировка задачи:
Как можно сохранять насройки окна(textbox...)?
Решение задачи: «Как сохранять настройки окна?»
textual
Листинг программы
- using System;
- using Microsoft.Win32;
- //using System.Security.AccessControl;
- using System.IO;
- ...
- /// <summary>
- /// Класс для рхранения настроек в системном реестре
- /// Общий принцип такой - каждый объект работает с ключом, сформированным
- /// в соответствии со своим Namespace.
- /// Родительский ключ - либо HKEY_CURRENT_USER, либо HKEY_LOCAL_MACHINE
- /// </summary>
- public sealed class RegistryUtils
- {
- // пространство имен вызывающего объекта
- private string CallerNamespace;
- // ключ рееста для вызывающего объекта
- private RegistryKey CallerKey;
- //Корневой ключ (HKLM или HKCU)
- private RegistryKey RootKey;
- /// <summary>
- /// Конструктор класса
- /// </summary>
- /// <param name="CallerType">Тип вызывающего объекта</param>
- /// <param name="UseCurrentUserKey">Использовать-ли в качестве родительского ключ HKCU?</param>
- public Utils(System.Type CallerType, bool UseCurrentUserKey)
- {
- // Получаем пространство имен вызывающего объекта.
- // Тип параметра Type выбран намеренно - чтобы не подсовывали
- // несущесвующих пространств имен
- CallerNamespace = CallerType.ToString();
- // Инициализируем корневой ключ
- if (UseCurrentUserKey)
- {
- RootKey = Registry.CurrentUser;
- }
- else
- {
- RootKey = Registry.LocalMachine;
- }
- // Формируем или получаем ключ для вызывающего объекта
- BuildRegistryKey();
- }
- /// <summary>
- /// Деструктор класса
- /// </summary>
- ~Utils()
- {
- if (CallerKey != null) CallerKey.Close();
- if (RootKey != null) RootKey.Close();
- }
- /// <summary>
- /// Метод проверки наличия в системе COM-объекта c заданным ProgID
- /// </summary>
- /// <param name="progID">ProgID объекта</param>
- /// <param name="isInprocServer">Является ли объект Inproc-сервером</param>
- /// <returns>результат проверки</returns>
- public static bool CheckLibByProgID(string progID, bool isInprocServer)
- {
- string filter = String.Format("{0}\\Clsid", progID);
- RegistryKey key = Registry.ClassesRoot.OpenSubKey(filter, false);
- if (key == null)
- return false;
- string clsid = key.GetValue(String.Empty).ToString();
- key.Close();
- if (isInprocServer)
- filter = String.Format("CLSID\\{0}\\InprocServer32", clsid);
- else
- filter = String.Format("CLSID\\{0}\\LocalServer32", clsid);
- key = Registry.ClassesRoot.OpenSubKey(filter, false);
- if (key == null)
- return false;
- string dllPath = key.GetValue(String.Empty).ToString();
- key.Close();
- bool res = File.Exists(dllPath);
- return File.Exists(dllPath);
- }
- /// <summary>
- /// Проверка существования ключа, в случае отсутсвия - создается, если createKey = true
- /// </summary>
- /// <param name="keyName">Название ключа</param>
- /// <param name="createKey">Если true и ключ не найден, то ключ создается</param>
- /// <returns>Найденный/Созданный ключ</returns>
- private RegistryKey CheckKey(string keyName, bool createKey)
- {
- return CheckKey(RootKey, keyName, createKey);
- }
- /// <summary>
- /// Проверка существования ключа, в случае отсутсвия - создается, если createKey = true
- /// </summary>
- /// <param name="rootKey">Корневой ключ (HKLM или HKCU)</param>
- /// <param name="keyName">Название ключа</param>
- /// <param name="createKey">Если true и ключ не найден, то ключ создается</param>
- /// <returns>Найденный/Созданный ключ</returns>
- private static RegistryKey CheckKey(RegistryKey rootKey, string keyName, bool createKey)
- {
- RegistryKey currentKey = rootKey.OpenSubKey(keyName, true);
- if (currentKey == null && createKey)
- currentKey = rootKey.CreateSubKey(keyName);
- return currentKey;
- }
- /// <summary>
- /// Проверка существования ключа, в случае отсутсвия - создается
- /// </summary>
- /// <param name="KeyName">Название ключа</param>
- /// <returns>Найденный/Созданный ключ</returns>
- private RegistryKey CheckKey(string KeyName)
- {
- return CheckKey(KeyName, true);
- }
- /// <summary>
- /// Проверка наличия параметра. Все параметры хранятся в строковом виде.
- /// В случае отсутсвия и если createParameter true - создается пустой параметр.
- /// </summary>
- /// <param name="ValueName">Название параметра</param>
- /// <param name="createParameter">Если true и параметр не найден, то параметр создается</param>
- /// <returns>Значение параметра (если параметра нет - возвращается пустая строка),
- /// это нужно учитывать при конвертации в численные типы
- /// </returns>
- private string CheckValue(string ValueName, bool createParameter)
- {
- object tmpValue = CallerKey.GetValue(ValueName);
- if (tmpValue == null && createParameter)
- {
- tmpValue = "";
- CallerKey.SetValue(ValueName, "");
- }
- if (tmpValue == null)
- return null;
- else
- return tmpValue.ToString();
- }
- /// <summary>
- /// Проверка наличия параметра. Все параметры хранятся в строковом виде.
- /// В случае отсутсвия - создается пустой параметр.
- /// </summary>
- /// <param name="ValueName">Название параметра</param>
- /// <returns>Значение параметра (если параметра нет - возвращается пустая строка),
- /// это нужно учитывать при конвертации в численные типы
- /// </returns>
- private string CheckValue(string ValueName)
- {
- return CheckValue(ValueName, true);
- }
- /// <summary>
- /// Получение/создание ключа реестра для вызывающего объекта
- /// </summary>
- private void BuildRegistryKey()
- {
- CallerKey = BuildRegistryKey(RootKey, CallerNamespace);
- }
- /// <summary>
- /// Получение/создание ключа реестра для вызывающего объекта
- /// </summary>
- public static RegistryKey BuildRegistryKey(RegistryKey rootKey, string objectNnamespace)
- {
- // разбираем пространство имен вызывающего объекта на составляющие
- string[] splitNamespace = objectNnamespace.Split(new Char[] { '.' });
- string callerKeyName = "SOFTWARE";
- // последовательно проходим по всей ветке и проверяем наличие ключей,
- // в случае отсутсвия - создаем
- foreach (string s in splitNamespace)
- {
- callerKeyName = callerKeyName + '\\' + s;
- CheckKey(rootKey, callerKeyName, true);
- };
- // Возвращаем ключ для вызывающего объекта
- return rootKey.OpenSubKey(callerKeyName, true);
- }
- /// <summary>
- /// Получение значению ключа
- /// </summary>
- /// <param name="KeyName">Имя значения</param>
- /// <returns>Значение</returns>
- public string GetKeyValue(string KeyName)
- {
- return CheckValue(KeyName);
- }
- /// <summary>
- /// Установка значения ключа
- /// </summary>
- /// <param name="KeyName">Имя значения</param>
- /// <param name="Value">Значение</param>
- public void SetKeyValue(string KeyName, object Value)
- {
- CallerKey.SetValue(KeyName, Value.ToString());
- }
- /// <summary>
- /// Поиск ключа по имени
- /// </summary>
- /// <param name="keyName">Имя ключа</param>
- /// <returns>true - ключ найден, иначе false</returns>
- public bool FindKey(string keyName)
- {
- return CheckKey(CallerKey.Name + "\\" + keyName, false) != null;
- }
- /// <summary>
- /// Поиск ключа по имени
- /// </summary>
- /// <param name="keyName">Имя ключа</param>
- /// <returns>true - ключ найден, иначе false</returns>
- public bool FindParameter(string keyName)
- {
- return CheckValue(keyName, false) != null;
- }
- /// <summary>
- /// Поиск и запись в массив всех подключей.
- /// </summary>
- /// <returns>Массив подключей.</returns>
- public string[] GetNames()
- {
- string[] names = CallerKey.GetSubKeyNames();
- return names;
- }
- /// <summary>
- /// Открывает ключ по полному пути.
- /// </summary>
- /// <param name="s">Путь</param>
- public RegistryKey OpenSubKeys(string s)
- {
- return CallerKey.OpenSubKey(s);
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д