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

на главную

Жанры

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

Следующая таблица показывает, как задавать директивы препроцессора:

Параметр Назначение
/define:<name> /d:<name>
Определяет символ препроцессора, заданный с помощью
<name>
.

Эта таблица объясняет параметры, связанные с включением внешних ресурсов:

Параметр Назначение
/linkresourсе:<имя файла> /linkres:<имя файла>
Создает связь с указанным ресурсом .NET. Двумя необязательными дополнительными параметрами (разделенными запятыми) являются:
identifier
: логическое имя ресурса; имя применяется для загрузки ресурса (по умолчанию используется имя файла),
mimetype
: строка, представляющая тип среды ресурса (по умолчанию используется
none
). Эта возможность
недоступна в Visual Studio.NET.
/resource:<имя файла> /res:<имя файла>
Вставляет определенный .NET ресурс в файл вывода. Двумя дополнительными необязательными параметрами (разделенными запятыми) являются:
identifier
: логическое имя ресурса; имя используется для загрузки ресурса (по умолчанию используется имя файла),
mimetype
: строка представляющая тип среды ресурса (по умолчанию
none
).
/win32icon:<имя файла>
Вставляет указанный файл пиктограммы Win32 (.ico) в файл вывода.
/win32res:<имя файла>
Вставляет указанный файл ресурса Win32 (.res) в файл вывода. Этот параметр недоступен в Visual Studio.NET.

Заключительная таблица перечисляет смешанные параметры компилятора.

Параметр Назначение
@<имя файла>
Указывает файл, содержащий все параметры компилятора и исходные файлы, которые будут обрабатываться компилятором, как если бы они вводились в командной строке.
/baseaddress:<address>
Указывает предпочтительный базовый адрес для загрузки DLL. Значение
<address>
может быть десятичным, шестнадцатеричным или восьмеричным.
/codepage:<id>
Определяет кодовую страницу (значение, передаваемое как параметр
<id>
) для использования при компиляции всех файлов исходного кода. Вводите этот параметр, если в файлах C# применяется множество символов, не используемых по умолчанию в данной системе. Этот параметр недоступен в Visual Studio.NET.
/help /?
Передает параметры компилятора на стандартный вывод. Этот параметр недоступен в Visual Studio.NET.
/incremental<+ | -> /incr<+ | ->
Разрешает выполнять инкрементную компиляцию файлов исходного кода, которая компилирует только те функции, которые были изменены с момента предыдущей компиляции. Информация о состоянии предыдущей компиляции хранится в двух файлах — .
dbg
(или
.pdb
, если был определен параметр
/debug
) для хранения информации отладки и
.incr
для хранения информации о состоянии. Чтобы включить параметр, используйте синтаксис:
/incremental
или
/incremental+
. Чтобы отключить, используйте синтаксис:
/incremental-
. Этот параметр отключен по умолчанию.
/main:<class>
Определяет расположение метода
Main
, если в исходном коде существует более одного метода с таким именем.
/nologo
Подавляет вывод заголовочной информации компилятора. Этот параметр недоступен в Visual Studio.NET.
/recurce: <dir\file>
Поиск подкаталогов для исходного файла с целью компиляции. Имеются два параметра:
dir
(необязательный): каталог или подкаталог, из которого начинается поиск. Если не определен, то это каталог текущего проекта.
file
: файл или файлы для поиска. Можно использовать метасимволы.
/unsafe
Разрешает компиляцию кода, который использует ключевое слово
unsafe
.

C# Сегодня

Статья "Программное соединение событий в C#" взята из базы знаний на сайте C# Today www.csharptoday.com издательства Wrox. Код, используемый в статье, можно загрузить вместе с кодом для всей книги со страницы Professional C# на Wrox.com.

Программное соединение событий в C#

Мэттью Рейнольдс

Одним из наиболее мощных свойств .NET является возможность создания динамических форм для приложений Windows. Известные и раньше, сегодня они очень легко создаются в .NET. Это позволяет получать объекты, производные из

System.Windows.Forms.Control
, непосредственно во время выполнения, и использовать их точно таким же образом, как если бы они были созданы проектировщиком форм.
Динамические элементы управления могут использоваться для настройки интерфейса пользователя приложения в зависимости от некоторой информации о среде выполнения, например административной утилиты базы данных, где кнопка динамически добавляется в утилиту для каждой таблицы, содержащейся в базе данных. Немного сложным моментом этой темы является соединение обработчиков событий с элементами управления. В этой статье показано, как динамически создавать элементы управления в C# и соединять методы с событиями элементов управления.

Создание проекта

Давайте создадим новый проект Visual C# — Windows Application и назовем его DynamicButtons.

Прежде всего необходимо скомпоновать базовую форму, которая выглядит следующим образом:

Пусть кнопка будет называться

cmdCreateButtons
, а текстовое поле —
txtLog
. Убедитесь, что в
txtLog
свойство
Multiline
задано как
True
, а свойство
ScrollBars
— как
Vertical
.

Когда будет нажата

cmdCreateButtons
, мы добавим к форме шесть кнопок, расположенных в пустом пространстве справа от
txtLog
. В то время как обработчики событий конфигурируются для новых кнопок, определим какая кнопка инициирует вызов. Здесь нужно, чтобы все кнопки имели дополнительные целые свойства с именем ID, которые при создании пронумерованы от 1 до 6.

Одной из отличительных черт .NET, к которой разработчикам VB необходимо привыкнуть, является идея наследования существующих классов из Framework (Среды разработки) и их расширение. Эта техника является очень эффективной. В данном случае необходимо создать новый класс с именем

DynamicButton
и наследовать его из
System.Windows.Forms.Button
. Это означает, что наш новый класс будет обладать всей функциональностью обычного элемента управления
Button
, но при этом иметь и другие свойства, которые нам понадобятся, в частности новое свойство с именем
DynamicID
. Так как этот класс является производным из
Button
, он выполняет все действия, присущие элементу управления кнопки, т. е. реагирует на нажатия, может быть помещен в форму и т.д.

Более того, действительно важный аспект наследования состоит в том, что любой знающий, как использовать

Button
, способен также применять
DynamicButton
. Однако необязательно знать, как использовать расширенную функциональность, по большей части ее можно применять как обычную кнопку. Вы также вправе вывести свои собственные классы из
DynamicButton
и добавить свою собственную функциональность. Итак, создадим новый класс с именем
DynamicButton
и добавим следующий код:

namespace DynamicButton {

 using System;

 public class DynamicButton : System.Windows.Forms.Button {

public int DynamicId;

public DynamicButton {

}

 }

}

Теперь есть новый класс, который ведет себя так же, как кнопка, но имеет целое свойство с именем

DynamicId
.

Фактически мы хотим добавить кнопке функциональность, в частности предоставить ID везде, где создается кнопка, и задать текст по умолчанию для отражения этого ID:

public DynamicButton(int newId) {

 // задать ID ...

 DynamicId = newId;

 // задать изображение ...

 Text = "Dynamic Button " + DynamicId;

}

Далее можно перейти к cозданию кнопок

Создание кнопок

Чтобы создать кнопки, добавим код обработчика для кнопки

cmdCreateButtons
. Это относительно простой код, но выглядит немного великоватым, так как нам необходимо самостоятельно управлять компоновкой новых кнопок для отслеживания координат кнопки при ее добавлении.

Первая часть обработчика задает цикл:

protected void cmdCreateButtons_Click (object sender, System.EventArgs e) {

 // определить, где должны располагаться новые кнопки ...

 int spacing = 8;

 int у = txtLog.Top;

 int width = this.Width - txtLog.Right - (3 * spacing);

 int height = 25;

 // цикл создания новыx кнопок

 int n = 0;

 for (n = 0; n < 6; n++) {

Здесь задано, что высота кнопки равна 25 и у начинается в той же точке, что и вершина

txtLog
. Мы также задали, что
spacing
равно 8, это значение используется для разделения кнопок.

Чтобы создать кнопку, делаем так:

// создать новую кнопку ...

DynamicButton newButton = new DynamicButton(n);

Отметим, как значение

n
передается в конструктор в качестве
DynamicId
кнопки. Следующим шагом является позиционирование кнопки на форме:

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

Мастер Разума VII

Кронос Александр
7. Мастер Разума
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер Разума VII

Набирая силу

Каменистый Артем
2. Альфа-ноль
Фантастика:
фэнтези
боевая фантастика
рпг
6.29
рейтинг книги
Набирая силу

Аристократ из прошлого тысячелетия

Еслер Андрей
3. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Аристократ из прошлого тысячелетия

70 Рублей - 2. Здравствуй S-T-I-K-S

Кожевников Павел
Вселенная S-T-I-K-S
Фантастика:
боевая фантастика
постапокалипсис
5.00
рейтинг книги
70 Рублей - 2. Здравствуй S-T-I-K-S

Сама себе хозяйка

Красовская Марианна
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Сама себе хозяйка

Треск штанов

Ланцов Михаил Алексеевич
6. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Треск штанов

LIVE-RPG. Эволюция 2

Кронос Александр
2. Эволюция. Live-RPG
Фантастика:
социально-философская фантастика
героическая фантастика
киберпанк
7.29
рейтинг книги
LIVE-RPG. Эволюция 2

Третий

INDIGO
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий

Последний попаданец 11. Финал. Часть 1

Зубов Константин
11. Последний попаданец
Фантастика:
фэнтези
юмористическое фэнтези
рпг
5.00
рейтинг книги
Последний попаданец 11. Финал. Часть 1

Обгоняя время

Иванов Дмитрий
13. Девяностые
Фантастика:
попаданцы
5.00
рейтинг книги
Обгоняя время

Отверженный VI: Эльфийский Петербург

Опсокополос Алексис
6. Отверженный
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Отверженный VI: Эльфийский Петербург

Изгой. Трилогия

Михайлов Дем Алексеевич
Изгой
Фантастика:
фэнтези
8.45
рейтинг книги
Изгой. Трилогия

Физрук 2: назад в СССР

Гуров Валерий Александрович
2. Физрук
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Физрук 2: назад в СССР

Адепт. Том второй. Каникулы

Бубела Олег Николаевич
7. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.05
рейтинг книги
Адепт. Том второй. Каникулы