Как сохранять настройки окна? - 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);
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5
Похожие ответы