C# для профессионалов. Том II
Шрифт:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using Microsoft.Win32;
Нам необходимо добавить одно поле к основному классу
Form1
, который будет представлять окно диалога выбора цвета. public class Form1 : System.Windows.Forms.Form {
/// <summary>
///
Обязательная переменная проектировщика.
/// </summary>
private System.СomponentModel.Container components;
private System.Windows.Forms.ListBox ListBoxMessages;
private system.Windows.Forms.Button buttonChooseColor;
ColorDialog ChooseColorDialog = new ColorDialog;
Довольно много действий происходит в конструкторе Form1:
public Form1 {
InitializeComponent;
buttonChooseColor.Click += new EventHandler(OnClickChooseColor);
try {
if (ReadSettings == false)
listBoxMessages.Items.Add("No information in registry");
else
listBoxMessages.Items.Add("Information read in from registry");
StartPosition = FormStartPosition.Manual;
} catch (Exception e) {
listBoxMessages.Items.Add("A problem occured reading in data from registry:");
listBoxMessages.Items.Add(e.Message);
}
}
В этом конструкторе мы начинаем с создания метода обработки события нажатия пользователем кнопки. Обработчиком является метод с именем
OnClickChooseColor
(см. ниже). Считывание конфигурационной информации делается с помощью другого метода — ReadSettings
. ReadSettings
возвращает true
, если находит информацию в реестре, и false
, если не находит (что будет, по-видимому, иметь место, так как приложение выполняется первый раз). Мы помещаем эту часть конструктора в блок try
на случай возникновения каких-либо исключений при считывании значений реестра (это может произойти, если вмешался некоторый пользователь и сделал какие-то изменения с помощью regedit
). Инструкция
StartPosition = FormStartPosition.Manual;
говорит форме взять свою начальную позицию из свойства DeskTopLocation
вместо используемого по умолчанию положения в Window (поведение по умолчанию). Возможные значения берутся из перечисления FormStartPosition
. SelfPlacingWindow
также является одним из немногих приложений в этой книге, для которого существенно используется добавление кода в метод Dispose
. Напомним, что Dispose
вызывается, когда приложение завершается нормально, так что это идеальное место для сохранения конфигурационной информации в реестре. Это делается с помощью другого метода, который будет написан,— SaveSettings
: /// <summary>
/// Очистить все использованные ресурсы
/// </summary>
public override void Dispose {
SaveSettings;
base.Dispose;
if(components != null) components.Dispose;
}
SaveSettings
ReadSettings
являются методами, которые содержат код для работы с интересующим нас реестром, но прежде чем их рассматривать, необходимо разобраться с обработкой события, возникающего при нажатии пользователем на кнопку. Это предполагает вывод диалогового окна выбора цвета и задание цвета фона в соответствии с выбором пользователя: void OnClickChooseColor(object Sender, EventArgs e) {
if (ChooseColorDialog.ShowDialog == DialogResult.OK)
BackColor = ChooseColorDialog.Color;
}
Теперь посмотрим, как сохраняются настройки:
void SaveSettings {
RegistryKey SoftwareKey = Registry.LocalMachine.OpenSubKey("Software", true);
RegistryKey WroxKey = SoftwareKey.CreateSubKey("WroxPress");
RegistryKey SelfPlacingWindowKey = WroxKey.CreateSubKey("SelfPlacingWindowKey");
SelfPlacingWindowKey.SetValue("BackColor", (object)BackColor.ToKnownColor);
SelfPlacingWindowKey.SetValue("Red", (object)(int) BackColor.R);
SelfPlacingWindowKey.SetValue("Green", (object)(int)BackColor.G);
SelfPlacingWindowKey.SetValue("Blue", (object)(int)Backcolor.В);
SelfPlacingWindowKey.SetValue("Width", (object)Width);
SelfPlacingWindowKey.SetValue("Height", (object)Height);
SelfPlacingWindowKey.SetValue("X", (object)DesktopLocation.X);
SelfPlacingWindowKey.SetValue("Y", (object)DesktopLocation.Y);
SelfPlacingWindowKey.SetValue("WindowState", (object)WindowState.ToString);
}
Мы начали с перемещения в реестре, чтобы получить ключ реестра
HKLM/Software/WroxPress/SelfPlacingWindow
с помощью продемонстрированной выше техники, начиная со статического свойства Registry.LocalMachine
, которое представляет улей HKLM
: RegistryKey SoftwareKey = Registry.LocalMachine.OpenSubKey("Software" , true);
RegistryKey WroxKey = SoftwareKey.CreateSubKey("WroxPress");
RegistryKey SelfPlacingWindowKey = WroxKey.CreateSubKey("SelfPlacingWindowKey");
Мы используем метод
RegistryKey.OpenSubKey
, а не RegistryKey.CreateSubKey
, позволявший добраться до ключа HKLM/Software
. Так происходит вследствие уверенности, что этот ключ уже существует, в противном случае имеется серьезная проблема с компьютером, так как этот ключ содержит настройки для большого объема системного программного обеспечения. Мы также указываем, что нам требуется доступ для записи в этот ключ. Это вызвано тем, что если ключ WroxPress
еще не существует, нам нужно будет его создать, что включает запись в родительский ключ.
Поделиться:
Популярные книги
Штуцер и тесак
1. Штуцер и тесак
Фантастика:
боевая фантастика
альтернативная история
8.78
рейтинг книги
Газлайтер. Том 17
17. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Рота Его Величества
Новые герои
Фантастика:
боевая фантастика
8.55
рейтинг книги
Академия
2. Клан Волка
Фантастика:
боевая фантастика
5.40
рейтинг книги
Мымра!
1. Мымрики
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Релокант
1. Релокант в другой мир
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Лучший из худший 3
3. Лучший из худших
Фантастика:
городское фэнтези
попаданцы
аниме
6.00
рейтинг книги
Ты нас предал
1. Измены. Кантемировы
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Его наследник
1. Наследники Сильных
Любовные романы:
современные любовные романы
эро литература
5.87
рейтинг книги
Ворон. Осколки нас
2. Ворон
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Сын Тишайшего
1. Царь Федя
Фантастика:
попаданцы
альтернативная история
фэнтези
5.20
рейтинг книги
Путь молодого бога
8. Играть, чтобы жить
Фантастика:
фэнтези
7.70
рейтинг книги
Зайти и выйти
Проза:
военная проза
5.00
рейтинг книги
Не грози Дубровскому!
1. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00