Симон Робинсон - C# для профессионалов. Том II
- Название:C# для профессионалов. Том II
- Автор:
- Жанр:
- Издательство:Лори
- Год:2003
- Город:Москва
- ISBN:5-85582-187-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Симон Робинсон - C# для профессионалов. Том II краткое содержание
Платформа .NET предлагает новую среду, в которой можно разрабатывать практически любое приложение, действующее под управлением Windows, а язык C# — новый язык программирования, созданный специально для работы с .NET.
В этой книге представлены все основные концепции языка C# и платформы .NET. Полностью описывается синтаксис C#, приводятся примеры построения различных типов приложений с использованием C# — создание приложений и служб Windows, приложений и служб WWW при помощи ASP.NET, а также элементов управления Windows и WWW Рассматриваются общие библиотеки классов .NET, в частности, доступ к данным с помощью ADO.NET и доступ к службе Active Directory с применением классов DirectoryServices.
Для кого предназначена эта книгаЭта книга предназначена для опытных разработчиков, возможно, имеющих опыт программирования на VB, C++ или Java, но не использовавших ранее в своей работе язык C# и платформу .NET. Программистам, применяющим современные технологии, книга даст полное представление о том, как писать программы на C# для платформы .NET.
Основные темы книги• Все особенности языка C#
• C# и объектно-ориентированное программирование
• Приложения и службы Windows
• Создание web-страниц и web-служб с помощью ASP NET
• Сборки .NET
• Доступ к данным при помощи ADO NET
• Создание распределённых приложений с помощью NET Remoting
• Интеграция с COM, COM+ и службой Active Directory
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 {
///
/// Обязательная переменная проектировщика.
///
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()
:
///
/// Очистить все использованные ресурсы
///
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
еще не существует, нам нужно будет его создать, что включает запись в родительский ключ.
Следующий ключ для перехода — HKLM/Software/WroxPress
, но так как мы не уверены, что ключ уже существует, то используем CreateSubKey()
для его автоматического создания, если он не существует. Отметим, что CreateSubKey()
автоматически предоставляет доступ для записи к рассматриваемому ключу. Когда мы достигнем HKLM/Software/Wrox
. Press/SelfPlacingWindow
, то останется просто вызвать метод RegistryKey.SetValue()
несколько раз, чтобы создать или задать соответствующие значения. Существуют, однако, некоторые осложнения.
Первое. Можно заметить что мы задействуем пару классов, которые раньше не встречались: свойство DeskTopPosition
класса Form
указывает позицию верхнего левого угла экрана и имеет тип Point
. Рассмотрим структуру Point
в главе GDI+. Здесь необходимо знать только, что она содержит два целых числа — X
и Y
, которые представляют горизонтальную и вертикальную позиции на экране. Мы также используем три свойства члена класса Color
: R
, G
и B
. Color
представляет цвет, а его свойства задают красный, зеленый и синий компоненты, которые составляют цвет и имеют тип byte
. Также применяется свойство Form
. WindowState
, содержащее перечисление, которое задает текущее состояние окна — minimized
, maximized
или restored
.
Отметим, что при преобразовании типов SetValue()
получает два параметра: строку, которая задает имя ключа, и экземпляр System.Object
, содержащий значение. SetValue
имеет возможность выбора формата для хранения значения, он может сохранить его как REG_SZ
, REG_BINARY
или REG_DWORD
, и он в действительности делает правильный выбор в зависимости от заданного типа данных. Поэтому для WindowsState
передается строка и SetValue()
определяет, что она должна быть преобразована в REG_SZ
. Аналогично для различных позиций и размеров, которые мы передаем, целые значения будут преобразованы в REG_DWORD
. Однако компоненты цвета являются более сложными, но мы хотим, чтобы они также хранились как REG_DWORD
, потому что они имеют числовые типы. Однако если метод SetValue()
видит, что данные имеют тип byte
, он будет сохранять их гак строку REG_SZ
в реестре. Чтобы избежать этого, преобразуем компоненты цвета в int
.
Интервал:
Закладка: