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

на главную - закладки

Жанры

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
кнопки. Следующим шагом является позиционирование кнопки на форме:

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

Черный Маг Императора 6

Герда Александр
6. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
7.00
рейтинг книги
Черный Маг Императора 6

Барон Дубов

Карелин Сергей Витальевич
1. Его Дубейшество
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Барон Дубов

Наука и проклятия

Орлова Анна
Фантастика:
детективная фантастика
5.00
рейтинг книги
Наука и проклятия

Уязвимость

Рам Янка
Любовные романы:
современные любовные романы
7.44
рейтинг книги
Уязвимость

Ваше Сиятельство 10

Моури Эрли
10. Ваше Сиятельство
Фантастика:
боевая фантастика
технофэнтези
фэнтези
эпическая фантастика
5.00
рейтинг книги
Ваше Сиятельство 10

Служанка. Второй шанс для дракона

Шёпот Светлана
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Служанка. Второй шанс для дракона

Камень. Книга восьмая

Минин Станислав
8. Камень
Фантастика:
фэнтези
боевая фантастика
7.00
рейтинг книги
Камень. Книга восьмая

О, Путник!

Арбеков Александр Анатольевич
1. Квинтет. Миры
Фантастика:
социально-философская фантастика
5.00
рейтинг книги
О, Путник!

Солнце мертвых

Атеев Алексей Григорьевич
Фантастика:
ужасы и мистика
9.31
рейтинг книги
Солнце мертвых

Зайти и выйти

Суконкин Алексей
Проза:
военная проза
5.00
рейтинг книги
Зайти и выйти

Часограмма

Щерба Наталья Васильевна
5. Часодеи
Детские:
детская фантастика
9.43
рейтинг книги
Часограмма

Избранное. Компиляция. Книги 1-11

Пулман Филип
Фантастика:
фэнтези
героическая фантастика
5.00
рейтинг книги
Избранное. Компиляция. Книги 1-11

Надуй щеки!

Вишневский Сергей Викторович
1. Чеболь за партой
Фантастика:
попаданцы
дорама
5.00
рейтинг книги
Надуй щеки!

Крутой маршрут

Гинзбург Евгения
Документальная литература:
биографии и мемуары
8.12
рейтинг книги
Крутой маршрут