Как сохранять настройки окна? - C#

Узнай цену своей работы

Формулировка задачи:

Как можно сохранять насройки окна(textbox...)?

Решение задачи: «Как сохранять настройки окна?»

textual
Листинг программы
  1. using System;
  2. using Microsoft.Win32;
  3. //using System.Security.AccessControl;
  4. using System.IO;
  5. ...
  6. /// <summary>
  7. /// Класс для рхранения настроек в системном реестре
  8. /// Общий принцип такой - каждый объект работает с ключом, сформированным
  9. /// в соответствии со своим Namespace.
  10. /// Родительский ключ - либо HKEY_CURRENT_USER, либо HKEY_LOCAL_MACHINE
  11. /// </summary>
  12. public sealed class RegistryUtils
  13. {
  14. // пространство имен вызывающего объекта
  15. private string CallerNamespace;
  16. // ключ рееста для вызывающего объекта
  17. private RegistryKey CallerKey;
  18. //Корневой ключ (HKLM или HKCU)
  19. private RegistryKey RootKey;
  20.  
  21. /// <summary>
  22. /// Конструктор класса
  23. /// </summary>
  24. /// <param name="CallerType">Тип вызывающего объекта</param>
  25. /// <param name="UseCurrentUserKey">Использовать-ли в качестве родительского ключ HKCU?</param>
  26. public Utils(System.Type CallerType, bool UseCurrentUserKey)
  27. {
  28. // Получаем пространство имен вызывающего объекта.
  29. // Тип параметра Type выбран намеренно - чтобы не подсовывали
  30. // несущесвующих пространств имен
  31. CallerNamespace = CallerType.ToString();
  32. // Инициализируем корневой ключ
  33. if (UseCurrentUserKey)
  34. {
  35. RootKey = Registry.CurrentUser;
  36. }
  37. else
  38. {
  39. RootKey = Registry.LocalMachine;
  40. }
  41. // Формируем или получаем ключ для вызывающего объекта
  42. BuildRegistryKey();
  43. }
  44.  
  45. /// <summary>
  46. /// Деструктор класса
  47. /// </summary>
  48. ~Utils()
  49. {
  50. if (CallerKey != null) CallerKey.Close();
  51. if (RootKey != null) RootKey.Close();
  52. }
  53.  
  54. /// <summary>
  55. /// Метод проверки наличия в системе COM-объекта c заданным ProgID
  56. /// </summary>
  57. /// <param name="progID">ProgID объекта</param>
  58. /// <param name="isInprocServer">Является ли объект Inproc-сервером</param>
  59. /// <returns>результат проверки</returns>
  60. public static bool CheckLibByProgID(string progID, bool isInprocServer)
  61. {
  62. string filter = String.Format("{0}\\Clsid", progID);
  63. RegistryKey key = Registry.ClassesRoot.OpenSubKey(filter, false);
  64. if (key == null)
  65. return false;
  66. string clsid = key.GetValue(String.Empty).ToString();
  67. key.Close();
  68. if (isInprocServer)
  69. filter = String.Format("CLSID\\{0}\\InprocServer32", clsid);
  70. else
  71. filter = String.Format("CLSID\\{0}\\LocalServer32", clsid);
  72. key = Registry.ClassesRoot.OpenSubKey(filter, false);
  73. if (key == null)
  74. return false;
  75. string dllPath = key.GetValue(String.Empty).ToString();
  76. key.Close();
  77. bool res = File.Exists(dllPath);
  78. return File.Exists(dllPath);
  79. }
  80.  
  81. /// <summary>
  82. /// Проверка существования ключа, в случае отсутсвия - создается, если createKey = true
  83. /// </summary>
  84. /// <param name="keyName">Название ключа</param>
  85. /// <param name="createKey">Если true и ключ не найден, то ключ создается</param>
  86. /// <returns>Найденный/Созданный ключ</returns>
  87. private RegistryKey CheckKey(string keyName, bool createKey)
  88. {
  89. return CheckKey(RootKey, keyName, createKey);
  90. }
  91.  
  92. /// <summary>
  93. /// Проверка существования ключа, в случае отсутсвия - создается, если createKey = true
  94. /// </summary>
  95. /// <param name="rootKey">Корневой ключ (HKLM или HKCU)</param>
  96. /// <param name="keyName">Название ключа</param>
  97. /// <param name="createKey">Если true и ключ не найден, то ключ создается</param>
  98. /// <returns>Найденный/Созданный ключ</returns>
  99. private static RegistryKey CheckKey(RegistryKey rootKey, string keyName, bool createKey)
  100. {
  101. RegistryKey currentKey = rootKey.OpenSubKey(keyName, true);
  102. if (currentKey == null && createKey)
  103. currentKey = rootKey.CreateSubKey(keyName);
  104. return currentKey;
  105. }
  106.  
  107. /// <summary>
  108. /// Проверка существования ключа, в случае отсутсвия - создается
  109. /// </summary>
  110. /// <param name="KeyName">Название ключа</param>
  111. /// <returns>Найденный/Созданный ключ</returns>
  112. private RegistryKey CheckKey(string KeyName)
  113. {
  114. return CheckKey(KeyName, true);
  115. }
  116.  
  117. /// <summary>
  118. /// Проверка наличия параметра. Все параметры хранятся в строковом виде.
  119. /// В случае отсутсвия и если createParameter true - создается пустой параметр.
  120. /// </summary>
  121. /// <param name="ValueName">Название параметра</param>
  122. /// <param name="createParameter">Если true и параметр не найден, то параметр создается</param>
  123. /// <returns>Значение параметра (если параметра нет - возвращается пустая строка),
  124. /// это нужно учитывать при конвертации в численные типы
  125. /// </returns>
  126. private string CheckValue(string ValueName, bool createParameter)
  127. {
  128. object tmpValue = CallerKey.GetValue(ValueName);
  129. if (tmpValue == null && createParameter)
  130. {
  131. tmpValue = "";
  132. CallerKey.SetValue(ValueName, "");
  133. }
  134. if (tmpValue == null)
  135. return null;
  136. else
  137. return tmpValue.ToString();
  138. }
  139.  
  140. /// <summary>
  141. /// Проверка наличия параметра. Все параметры хранятся в строковом виде.
  142. /// В случае отсутсвия - создается пустой параметр.
  143. /// </summary>
  144. /// <param name="ValueName">Название параметра</param>
  145. /// <returns>Значение параметра (если параметра нет - возвращается пустая строка),
  146. /// это нужно учитывать при конвертации в численные типы
  147. /// </returns>
  148. private string CheckValue(string ValueName)
  149. {
  150. return CheckValue(ValueName, true);
  151. }
  152.  
  153. /// <summary>
  154. /// Получение/создание ключа реестра для вызывающего объекта
  155. /// </summary>
  156. private void BuildRegistryKey()
  157. {
  158. CallerKey = BuildRegistryKey(RootKey, CallerNamespace);
  159. }
  160.  
  161. /// <summary>
  162. /// Получение/создание ключа реестра для вызывающего объекта
  163. /// </summary>
  164. public static RegistryKey BuildRegistryKey(RegistryKey rootKey, string objectNnamespace)
  165. {
  166. // разбираем пространство имен вызывающего объекта на составляющие
  167. string[] splitNamespace = objectNnamespace.Split(new Char[] { '.' });
  168. string callerKeyName = "SOFTWARE";
  169. // последовательно проходим по всей ветке и проверяем наличие ключей,
  170. // в случае отсутсвия - создаем
  171. foreach (string s in splitNamespace)
  172. {
  173. callerKeyName = callerKeyName + '\\' + s;
  174. CheckKey(rootKey, callerKeyName, true);
  175. };
  176. // Возвращаем ключ для вызывающего объекта
  177. return rootKey.OpenSubKey(callerKeyName, true);
  178. }
  179.  
  180. /// <summary>
  181. /// Получение значению ключа
  182. /// </summary>
  183. /// <param name="KeyName">Имя значения</param>
  184. /// <returns>Значение</returns>
  185. public string GetKeyValue(string KeyName)
  186. {
  187. return CheckValue(KeyName);
  188. }
  189.  
  190. /// <summary>
  191. /// Установка значения ключа
  192. /// </summary>
  193. /// <param name="KeyName">Имя значения</param>
  194. /// <param name="Value">Значение</param>
  195. public void SetKeyValue(string KeyName, object Value)
  196. {
  197. CallerKey.SetValue(KeyName, Value.ToString());
  198. }
  199.  
  200. /// <summary>
  201. /// Поиск ключа по имени
  202. /// </summary>
  203. /// <param name="keyName">Имя ключа</param>
  204. /// <returns>true - ключ найден, иначе false</returns>
  205. public bool FindKey(string keyName)
  206. {
  207. return CheckKey(CallerKey.Name + "\\" + keyName, false) != null;
  208. }
  209.  
  210. /// <summary>
  211. /// Поиск ключа по имени
  212. /// </summary>
  213. /// <param name="keyName">Имя ключа</param>
  214. /// <returns>true - ключ найден, иначе false</returns>
  215. public bool FindParameter(string keyName)
  216. {
  217. return CheckValue(keyName, false) != null;
  218. }
  219.  
  220. /// <summary>
  221. /// Поиск и запись в массив всех подключей.
  222. /// </summary>
  223. /// <returns>Массив подключей.</returns>
  224. public string[] GetNames()
  225. {
  226. string[] names = CallerKey.GetSubKeyNames();
  227. return names;
  228. }
  229.  
  230. /// <summary>
  231. /// Открывает ключ по полному пути.
  232. /// </summary>
  233. /// <param name="s">Путь</param>
  234. public RegistryKey OpenSubKeys(string s)
  235. {
  236. return CallerKey.OpenSubKey(s);
  237. }
  238. }

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


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

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

10   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы