Глава 1. Общее
5
Часто задаваемые вопросы 5
Можно ли запустить программу, написанную на C#, без .NET Framework? 5
В каком редакторе писать программы? 5
Использование в качестве переменных русских символов 7
Псевдонимы 7
Копирующий строковой литерал 8
Символ @ перед идентификатором 8
Как узнать, присвоено ли переменной значение 9
Как это назвать? 10
Какая разница между string и System.String? 10
Выберите свои правила наименования 11
Правила для названий классов и методов 11
Советы по созданию эффективных и масштабируемых приложений 11
Сопряжение 11
Наследование 12
Минимизация кода 12
Экономия ресурсов 12
Создание автоматически обновляемых приложений 13
Заключение 13
Глава 2. Строки, даты, числа
15
Строки 15
Простейшие операции со строками 15
Входит ли строка в другую строку? 16
Преобразование строки в число 17
Вставка специального символа 17
Создание строки из повторяющихся символов 19
Метод String.Format 19
Преобразование строки в объект Color 19
Проверка строки на пустоту 20
Переворачиваем строку 21
Сжатие длинных имен файлов 22
Печатающийся текст 23
Бегущая строка 24
Как соединять строки 25
Что лучше: Parse или TryParse? 26
Сравнение и сортировка строк 27
Даты 28
Как получить текущую дату 28
Дата и время в разных форматах 29
Как использовать дату и время в приложении 31
Сложить и вычесть временной интервал из дат 32
Вычисление разницы между датами 33
Как определить, является ли год високосным? 34
Вычисление даты католической Пасхи 35
Числа 36
Преобразование числа в шестнадцатеричную систему счисления 36
Как перевести число в двоичную систему счисления? 37
Как перевести число в восьмеричное или шестнадцатеричное представление? 37
Является ли выражение числом? 37
Создание собственной функции IsNumeric на C# 38
Создание уникального идентификатора 39
Перечисления 40
Как получить все элементы перечисления 40
Заключение 42
Глава 3. Алгоритмы
43
Найти наименьшее и наибольшее значение из трех чисел 43
Массив строк 44
Преобразование градусов в радианы и радианов в градусы 45
Четное или нечетное число 46
Получить старшее и младшее слова из числа 47
Преобразование градусов по Фаренгейту в градусы по Цельсию 48
Генерирование случайного цвета 49
Подсчет суммы всех целых чисел диапазона 49
Нахождение простых чисел 50
Вывод программой своего исходного кода 53
Заключение 54
Глава 4. Интегрированная среда разработки (IDE)
55
Удобные клавиатурные команды 55
Получение списка всех назначенных клавиш 56
Настройка назначенных клавиш 59
Показ назначенных клавиш во всплывающих подсказках 62
Селектор оконных конфигураций 62
Фрагменты кода (code snippets) 65
Создание XML-файла 68
Встроенные фрагменты кода 72
Распространение собственных фрагментов кода 72
Настройка стартовой страницы Visual Studio 73
Настройки для групповой работы 73
Создание файла параметров 74
Размещение файла параметров в пути UNC 74
Параметр /resetuserdata 75
Ряд мелких советов 75
Как показывать нумерацию строк в редакторе кода? 76
Как изменить цвет для регионов кода? 76
Вертикальное выделение текста 76
Альтернативный метод поиска строк 76
Множественное копирование в буфер обмена 78
Как управлять фрагментами кода в Visual Studio 2008? 78
Быстрое комментирование и раскомментирование фрагментов кода 78
Отображение IntelliSense 78
Прозрачная подсказка IntelliSense 79
Перемещение от открывающей скобки к закрывающей скобке 79
Сворачивание/разворачивание блока (региона, функции, цикла и т. п.) 79
Анимация при автоматическом скрытии панелей 79
Вариант загрузки справочной системы 80
Путь к файлу 80
Быстрый переход к папке, содержащей исходные коды проекта 80
Изменение шаблона заготовки метода в C#, генерируемого автоматически 81
Вспомнить название пространства имен 82
Удобный способ вызвать Smart Tag 82
Создание собственных шаблонов приложений 83
Работа в полноэкранном режиме 84
Быстрый поиск в списках 84
Поле Find 84
Окно Command 85
Диалоговое окно Find and Replace 86
Еще о настройках 88
Сокрытие статусной строки 88
Число показываемых последних файлов 88
Многодокументный интерфейс 88
Управление панелями Auto Hide и Close 88
Меню Window 89
Переключение между окнами 89
Помоги себе и команде Visual Studio, или пишем логи 89
Графические файлы для проектов 89
Надстройки 90
Надстройки сторонних разработчиков 90
GhostDoc 90
SmartPaster 92
PInvoke.NET 93
Paste as Visual Basic 95
Заключение 95
Глава 5. Экран и формы
97
Экран 99
Как определить разрешение экрана 99
Как определить рабочую область экрана без панели задач? 99
Как изменить разрешение экрана программным путем 100
Формы 103
Как вывести форму в центре экрана? 103
Как задать позицию формы на экране? 103
Как программно свернуть или развернуть форму? 104
Поддержка тем рабочего стола Windows 104
Как узнать, используются ли темы Windows XP? 105
Как отобразить форму без передачи ей фокуса? 105
Как не отображать форму при запуске программы? 106
Как сделать так, чтобы форма отбрасывала тень? 107
Как вывести запрос при закрытии формы? 108
Выбираем варианты закрытия формы 109
Сокрытие значка формы на панели задач и при нажатии комбинации клавиш + 110
Как отобразить форму на весь экран? 111
Как установить ограничение на минимальный и максимальный размер окна? 111
Как отловить момент сворачивания или разворачивания формы? 112
Как запретить пользователю перемещать форму по экрану? 113
Как перемещать форму, не имеющую заголовка? 114
Еще два способа буксировки формы, не имеющей заголовка 116
Как добиться эффекта полупрозрачности у формы 118
Перемещение формы за заголовок 119
Неактивная форма 120
Как создать формы без границ и заголовка? 121
Как убрать кнопку X из заголовка формы? 121
Убрать кнопку Х при помощи управляемого кода 123
Создать окно произвольной формы 123
Создание дырявой формы 125
Как создать форму в виде текста? 127
Смена темы Windows XP 128
Как форме получать уведомления о нажатии кнопок, когда фокус ввода находится в каком-либо элементе управления формы? 129
Как получить список всех открытых форм, принадлежащих приложению? 130
Сохранение настроек формы 131
Создание и использование параметров командной строки 131
Установить фоновый цвет в родительской MDI-форме 134
Запрет на запуск второй копии приложения 135
Как передавать значения между формами Windows Forms 136
Способ первый 136
Второй способ 137
Заключение 138
Глава 6. Элементы управления
139
Общие советы 139
Как добавить элемент управления на форму во время выполнения программы? 139
Как пройтись по всем элементам управления на форме? 140
Как изменить цвет границы (Border) у элемента управления? 141
Окантовка вокруг элемента управления 142
Как программно перевести фокус на следующий/предыдущий (в порядке TAB) элемент управления? 143
Как изменить Z-порядок элемента управления? 144
Как узнать размеры строки в пикселах, отображаемой в каком-нибудь элементе управления? 145
Как сделать элемент управления произвольной формы? 146
Кнопки (Button) 148
Как установить кнопку по умолчанию для формы? 148
Как установить кнопку отмены (Cancel) для формы? 148
Как программно вызвать событие Click у кнопки? 148
Как создать западающую кнопку? 149
Список (ListBox) 149
Автоматическая прокрутка списка 149
Подгоняем ширину списка под самый длинный текст 150
Как заполнить список именами файлов, перетаскиваемых из Проводника? 150
Разделить список цветными линиями и заполнить цветным текстом 151
Поле со списком (ComboBox) 153
Подгоняем ширину поля со списком под самый длинный текст 153
Поддержка автозавершения 153
Как раскрыть поле со списком программным способом? 154
Как запретить раскрытие списка? 155
Как изменить высоту элементов списка у элемента управления ComboBox? 156
Как установить желаемую высоту выпадающего списка у ComboBox? 157
Как использовать ComboBox для редактирования данных в ListView? 157
Текстовые поля (TextBox) 158
Подсчет числа строк в многострочном текстовом поле 158
Фильтрация заданных символов при вводе с клавиатуры 159
Как заблокировать контекстное меню в текстовом поле? 160
Запрет вставки текста из буфера обмена Windows 160
Как ввести многострочный текст в текстовое поле программно? 161
Как сделать так, чтобы символы вводились в нужном регистре? 162
Как избавиться от звукового сигнала при нажатии на клавишу ввода? 162
Как выделить текст программным способом? 163
Элемент RichTextBox 164
Просмотр форматированного текста RTF 164
Как управлять цветом и шрифтами в RichTextBox? 165
Как управлять текстом-гиперссылкой в RichTextBox? 166
Поддержка Drag’n’Drop 166
Как определить наличие полос прокрутки в элементе RichTextBox? 167
Как запретить вставку 168
Элемент управления MaskedTextBox 169
Элемент DateTimePicker 169
Как показать пустой текст, если в DateTimePicker не выбрана дата? 169
Как программно раскрыть DateTimePicker? 170
Элементы Label и Panel 170
Полупрозрачная надпись 170
Использование Label в виде разделительной линии как элемент дизайна 171
Элемент LinkLabel 172
Отображение лишь части текста в виде ссылки 173
Несколько ссылок в одном LinkLabel 174
NotifyIcon — значок в области уведомлений 175
Как создать мигающий значок в области уведомлений? 176
Как создать анимированный значок в области уведомлений? 177
Свертывание формы вместо закрытия приложения 178
Элемент ListView 179
Как убрать выделение элемента в ListView программно? 179
Как программно выбрать элемент в ListView? 179
Как сортировать элемент управления ListView по колонкам 180
Изменение цвета подэлементов ListView программным путем 185
Элемент управления ToolTip 186
Почему пользователь не видит подсказки в стиле Balloon? 186
Многострочная подсказка 187
Меню 187
Фон для меню 188
Как добавить контекстное меню элементу управления? 188
Как определить, какой элемент вызвал контекстное меню? 188
Автоматическое закрытие контекстного меню через заданный промежуток времени 189
Дерево (TreeView) 190
Как показать подсказку над узлом TreeView? 190
Вкладки (TabControl) 192
Программное переключение на другую вкладку 192
Установка фокуса на элементе управления на вкладке во время загрузки формы 192
Как вывести ярлычки внизу вкладки TabControl? 193
Добавление новой вкладки 193
Удаление вкладки 193
Как вставить вкладку в определенную позицию? 194
Элемент PerformanceCounter 195
Как создать счетчик производительности процессора? 195
StatusBar и StatusStrip 197
Как изменить шрифт и фон для StatusBar 197
Элементы FlowLayoutPanel и TableLayoutPanel 198
Элемент DataGrid 198
Элемент DataGridView 199
Создание собственных элементов управления 200
Как скрыть свойство или метод от IntelliSense в редакторе кода? 200
Как скрыть свойства и события из редактора свойств PropertyGrid при создании собственного элемента управления? 201
Как запретить изменять размер элемента управления во время разработки? 202
Как во время разработки позволить выбирать значение свойства из нескольких предопределенных в поле со списком? 203
Как добиться того, чтобы свойство моего элемента управления было видно в разделе DataBindings окна свойств? 204
Как сделать свой элемент управления, выступающий в роли контейнера для других элементов управления во время разработки? 204
Как присвоить свой значок для собственного элемента управления в панели инструментов? 205
Создание собственного элемента управления SmoothProgressBar 206
Создание элемента SmoothProgressBar 208
Создание клиентской программы для тестирования 213
Заключение 215
Глава 7. Графика
217
Преобразование цвета в HTML-формат 217
Как преобразовать цвет в целое число? 218
Как получить доступ к определенному пикселу изображения? 218
Как нарисовать точку? 218
Как получить цвет любой выбранной точки экрана? 219
Как нарисовать прямоугольник с закругленными краями? 222
Установка фонового изображения 223
Как сделать снимок экрана? 225
Сохранить изображение элемента управления или формы 225
Как получить прокручиваемый рисунок? 226
Получение негатива изображения 226
Сделать изображение серым 227
Как создать затемненную картинку 228
Эффект недоступной кнопки 229
Как нарисовать вдавленный и выпуклый текст? 230
Как получить контурный текст 231
Как отразить текст в зеркальном отражении? 232
Как повернуть текст под некоторым углом? 233
Вот новый поворот (из песни группы "Машина времени") 234
Бегущая градиентная строка 235
Скроллинг текста 236
Анимированные картинки 238
Как сохранить изображение из буфера обмена в файл 239
Шрифты и печать 240
Получение списка установленных шрифтов 240
Использование собственных шрифтов 242
Получение списка установленных принтеров 243
Как распечатать документ? 244
Как показать окно предварительного просмотра перед печатью 246
Заключение 247
Глава 8. Работа с мышью и клавиатурой
249
Мышь 249
Как скрыть и показать указатель мыши? 249
Как установить позицию указателя мыши? 250
Анимированные курсоры 251
Мышеловка 251
Право выбора 252
Меняем кнопки мыши местами 254
Как узнать координаты мыши? 255
Как преобразовать экранные координаты в клиентские (для данного элемента) и наоборот? 255
Как двигать указателем мыши программно? 256
Как выполнить эмуляцию щелчков мыши? 258
Рисование 259
Работа с клавиатурой 262
Как переключать раскладки клавиатуры? 262
Как получить текущий язык ввода? 263
Как послать нажатия клавиш программно? 263
Как включать и выключать индикаторы клавиш , и ? 264
Как определить состояние клавиш-индикаторов? 266
Последнее нажатие на клавишу или на кнопку мыши 267
Заключение 269
Глава 9. Приложения
271
Работа с процессами 271
Как получить полное имя файла запущенного приложения? 271
Как получить путь к папке, из которой запущено приложение? 272
Как запустить другой исполняемый файл из своего приложения? 272
Как закрыть все копии Блокнота? 274
Запуск программы по имени файла 275
Как узнать число процессоров в системе? 276
Как приостановить выполнение программы на несколько секунд? 277
Как получить список всех процессов, запущенных в системе? 277
Как получить список только оконных процессов на моей машине? 278
Как получить список определенных процессов? 279
Получение списка процессов на удаленной машине 279
Как открыть почтовый клиент, установленный по умолчанию, и установить необходимые параметры для отправки письма? 280
Определение операционной системы пользователя 281
Определение версии .NET Framework и ее сервис-пака 283
.NET Framework 1.0 284
.NET Framework версий 1.1, 2.0 3.0 и v3.5 (Orcas) 284
.NET Framework 3.0 285
Определение папки установки .NET Framework 294
Номер сборки 295
Обновление номера версии сборки в автоматическом режиме 295
Вызов файла справки CHM 296
Получение номера версии файла и другую информацию 296
Определение имени пользователя системы 298
Как определить, имеет ли ваша система мышь, узнать число кнопок у мыши, размер вашего монитора и другую информацию? 298
Как зарегистрировать файлы DLL и OCX? 300
Извлечение строки или значка из ресурсов 301
Сохранение настроек приложения 302
Работа с реестром 304
Определение архитектуры операционной системы 306
Добавление программы в автозагрузку 306
Получение информации об изменениях в системе 308
Как узнать, что пользователь изменил разрешение экрана? 308
Изменение времени 309
Консольные приложения 310
Журналы событий 311
Как найти доступные журналы событий на компьютере? 311
Чтение и запись логов в журнал событий 311
Запись в журнал 312
Очистка записей в журнале событий 313
Создание собственного журнала событий 313
Удаление собственного журнала событий 314
Измерение времени выполнения кода в приложении 314
Измерение с помощью функций Windows API 315
Измерение с помощью метода Ticks 316
Измерение с помощью TickCount 316
Класс StopWatch 317
Заключение 318
Глава 10. Диски, папки и файлы
319
Диски 319
Как получить список логических дисков? 319
Как узнать тип диска и его свойства? 320
Папки 321
Как получить список папок? 321
Как проверить существование папки? 322
Как переименовать папку? 322
Как удалять папки? 323
Как выбрать папку? 324
Как получить путь для папки Мои документы и других специальных папок Windows? 324
Свойства папки 326
Размеры папки 327
Как написать свой Проводник? 328
Файлы 330
Как получить список файлов в папке? 331
Как получить список папок и файлов? 331
Как получить список файлов по маске? 332
Как узнать, существует ли файл? 332
Как получить имя файла из полного пути файла? 332
Как получить расширение файла из полного пути? 333
Как создать, удалить, переместить файл? 333
Как установить атрибуты у файла? 334
Свойства файла 334
Как извлечь информацию о файле? 335
Как создать временный файл? 336
Как создать уникальное имя для файла? 336
Как ограничить доступ к файлу? 337
Как работать с бинарными файлами? 338
Как работать с текстовыми файлами? 339
Как добавить текст в существующий файл? 340
Построчное чтение текстового файла 340
Загрузить текстовый файл в список? 341
Как получить короткое имя файла из длинного файла и наоборот? 343
Как удалить файл в Корзину 344
Как записать и прочитать текст в различных кодировках? 346
Как прочитать XML-файлы? 347
Сравнение двух файлов 351
Отслеживание изменений в файловой системе 353
Как установить уровень доступа к файлу? 355
Заключение 356
Глава 11. Библиотека WSH
357
Создание ярлыка 357
Получение списка установленных в системе принтеров 358
Установка принтера по умолчанию 359
Получение списка сетевых дисков 359
Заключение 360
Глава 12. WMI
361
Использование WMI на удаленной машине 361
Информация об операционной системе 362
Информация о компьютере 364
Информация о производителе 365
Получение информации о процессорах 366
Информация о свойствах видеоконтроллера 369
Получение свойств приводов компакт-дисков 370
Информация о параметрах загрузки Windows 371
Информация о сетевом адаптере 372
Информация о мониторе 373
Материнская плата 373
Вывод списка общих ресурсов 374
Информация о логических дисках 375
Перезагрузка компьютера 376
Дополнительный пример 377
Заключение 378
Глава 13. Мультимедиа
379
Звуковые сигналы 379
Функция Windows API Beep 379
Функция Windows API MessageBeep 379
Функция Beep для Visual Basic 380
Звуковые файлы 380
И снова о Beep 381
Как проигрывать звуки разных форматов? 382
Воспроизведение MIDI и MP3 через неуправляемый код 382
Извлечение информации из файлов MP3 383
Взаимодействие с Winamp 392
Заключение 393
Глава 14. Разработка локализованных приложений
395
Общая информация о локализации 397
Локализующие идентификаторы 398
Культура 399
Приложение Culture Explorer 400
Разработка многоязычного приложения 403
Разделяй и властвуй 405
Сопутствующие сборки 405
Заключение 406
Глава 15. Microsoft Office
407
Excel 407
Раннее связывание 407
Автоматизация Excel или как работать массивами 409
Позднее связывание 414
Outlook 417
Как получить сообщения из папки Входящие? 417
Получение уведомлений о новых письмах 419
VSTO 420
Заключение 421
Глава 16. Локальная сеть и Интернет
423
Информация о сети 423
Как получить хост, порт, протокол из веб-адреса? 423
Как получить IP-адрес компьютера, используя DNS? 424
Как получить NETBIOS-имя машины? 425
Как получить IP-адрес локальной машины? 425
Ping 426
Проверка доступности веб-адреса 428
Подключен ли компьютер к Интернету? 429
Пересылка данных по протоколу HTTP 430
Как послать запрос GET и отобразить полученные данные? 430
Как скачать файл из Интернета? 431
Передача файлов по протоколу FTP 432
Закачка файла на FTP-сервер 433
Получение оглавления папки 435
Загрузка файлов 437
Отправка писем через SMTP 438
Использование браузера Mozilla Firefox 439
Работа с локальной сетью 443
Как получить имя текущего пользователя? 443
Как выяснить, подключена ли локальная система к сети, и узнать используемый тип соединения? 444
Получение списка всех компьютеров локальной сети 445
Список SQL-серверов при помощи управляемого кода 453
Как получить дату и время удаленного компьютера? 454
Заключение 457
Глава 17. Функции Windows API
459
Вызов функций Windows API, имеющих выходной строковый параметр char* 460
Изменение типа, применяемого для маршалинга по умолчанию 461
Вызов функций, требующих struct 462
Работа с функциями обратного вызова в C# 463
Создание собственной управляемой библиотеки 463
Примеры использования функций API 464
Блокировка компьютера 464
Является ли текущий пользователь администратором? 464
Мигание заголовка формы 465
Форматирование дисков 466
Открытие и закрытие лотка привода компакт-дисков 467
Создание собственного пункта в системном меню 468
Работа с конфигурационными файлами INI 471
Извлечение значков из файлов 473
Вызов диалогового окна Смена значка 474
Продолжаем работать со значками 475
Панель задач, кнопка Пуск и часы в области уведомлений 477
Смена обоев Рабочего стола 481
Использование функций обратного вызова 484
Получение списка кодовых страниц, установленных в системе 484
Заключение 485
Глава 18. Новинки Visual Studio 2008
487
Новшества в C# 3.0 487
Неявно типизированные переменные 487
Инициализация объектов 488
LINQ 489
Вывод чисел из заданного массива с условием 489
Ключевое слово Where 490
Увеличение на единицу ряда чисел 490
Вывод имени числа 491
Вывод строк из массива в разных регистрах 491
Оператор Take 492
Оператор TakeWhile 493
Оператор Skip 493
Оператор SkipWhile 494
Заключение 494
Глава 19. Ссылки на интересные места
495
Сайты 495
Блоги 496
Заключение 497
Описание компакт-диска 499
Предметный указатель 501