Чтение онлайн

на главную

Жанры

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
еще не существует, нам нужно будет его создать, что включает запись в родительский ключ.

Поделиться:
Популярные книги

Неудержимый. Книга XII

Боярский Андрей
12. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XII

Мастер 5

Чащин Валерий
5. Мастер
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Мастер 5

Идущий в тени 5

Амврелий Марк
5. Идущий в тени
Фантастика:
фэнтези
рпг
5.50
рейтинг книги
Идущий в тени 5

Три `Д` для миллиардера. Свадебный салон

Тоцка Тала
Любовные романы:
современные любовные романы
короткие любовные романы
7.14
рейтинг книги
Три `Д` для миллиардера. Свадебный салон

Проклятый Лекарь. Род II

Скабер Артемий
2. Каратель
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Проклятый Лекарь. Род II

Вальдиры миры. Кроу-3

Михайлов Дем Алексеевич
3. Кроу
Фантастика:
фэнтези
рпг
8.38
рейтинг книги
Вальдиры миры. Кроу-3

Новый Рал 8

Северный Лис
8. Рал!
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Новый Рал 8

Приручитель женщин-монстров. Том 7

Дорничев Дмитрий
7. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 7

Системный Нуб

Тактарин Ринат
1. Ловец душ
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Системный Нуб

Объединитель

Астахов Евгений Евгеньевич
8. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Объединитель

Жребий некроманта. Надежда рода

Решетов Евгений Валерьевич
1. Жребий некроманта
Фантастика:
фэнтези
попаданцы
6.50
рейтинг книги
Жребий некроманта. Надежда рода

Мимик нового Мира 7

Северный Лис
6. Мимик!
Фантастика:
юмористическое фэнтези
постапокалипсис
рпг
5.00
рейтинг книги
Мимик нового Мира 7

Академия

Кондакова Анна
2. Клан Волка
Фантастика:
боевая фантастика
5.40
рейтинг книги
Академия

Приручитель женщин-монстров. Том 2

Дорничев Дмитрий
2. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 2