-
Почти во всех материалах по .NET-программированию, публикуемых в журналах и Интернете, основное внимание уделяется web-службам, использованию браузера как платформы программирования, ASP.NET и другим темам, так или иначе связанным с Web.
-
Программисты VB6 легко привыкают к особенностям работы с формами и элементами в VS.NET IDE. В вашем распоряжении оказывается пара новых (притом весьма полезных) инструментов, кратко описанных далее, однако общие принципы работы с панелью элементов (toolbox) почти не изменились.
-
В прежних версиях VB6 случайное изменение размеров формы приводило к тому, что все старания по размещению элементов на стадии конструирования шли прахом. Чтобы решить эту проблему, программисту приходилось либо самостоятельно программировать масштабирование формы, либо тратиться на специальный элемент управления.
-
В главе 1 был приведен довольно сложный код Windows-приложения, автоматически сгенерированный IDE. Приложение выполняло простейшую функцию – оно реагировало на нажатие кнопки. Тогда же мы пообещали, что вскоре вы поймете, как работает эта программа.
-
Ограниченный объем книги не позволяет нам рассмотреть все свойства класса Form, но мы хотим выделить существенные различия между поведением форм в прежних версиях VB и VB.NET. Одно из самых принципиальных изменений связано с использованием шрифтов.
-
Хотя визуальное конструирование форм в книге почти не рассматривается, мы просто не могли не упомянуть новый редактор меню. Программисты VB уже давно ждали чего-то подобного. Впрочем, при всем удобстве нового редактора вы извлечете из него максимум пользы лишь при полном понимании кода, сгенерированного IDE. | Построить меню в редакторе меню (Menu Editor) несложно.
-
В прежних версиях VB при программировании приложений с интерфейсом MDI (Multiple Document Interface) родительская форма MDI выбиралась на стадии конструирования. В .NET эта задача решается иначе – свойству IsMdiContainer формы задается значение True.
-
В .NET Framework включена поддержка стандартных диалоговых окон; соответствующие элементы расположены в нижней части панели элементов (рис. 8. 14). | Рис. 8.14. Стандартные диалоговые окна на панели элементов | Элементы диалоговых окон обладают различными свойствами, управляющими их поведением.
-
До выхода VB6 существовал лишь один способ размещения элементов на форме во время выполнения программы – массивы элементов. В VB6 появился более удобный режим динамического добавления элементов, но и в этом случае не обходилось без проблем с обработкой событий для добавленных элементов.
-
Прежде всего следует сказать, что "визуальное наследование", часто упоминаемое в рекламных материалах по VB.NET, существует лишь в больном воображении специалистов по маркетингу. На самом деле речь идет о том, что формы, созданные в программе, могут использоваться как основа для определения новых форм посредством наследования.
-
Начнем с переопределения событий базового класса. Например, событие OnChange поможет предотвратить ввод в поле всего, что не является целым числом.
-
Добавить поддержку нового события в элемент ничуть не сложнее, чем включить обработчик события в класс (эта тема рассматривалась в главе 6). Предположим, каждый раз, когда пользователь вводит нечто отличное от положительного целого числа, элемент должен инициировать событие BadDataEntered.
-
Рассмотрев простейшие возможности использования пространства имен Windows.Forms на конкретных примерах, мы переходим к иерархии классов, показанной на рис. 8.20. | Диаграмма выглядит весьма устрашающе, но мы уделим основное внимание главной линии наследования: | System.ComponentModel.Component > Control | Из рис. 8.20 видно, что классы форм и элементов являются производными от класса Control.
-
Класс Control содержит более 300 членов, и описать их все (или хотя бы большую часть) в одной главе просто невозможно. Следовательно, вам все равно придется обратиться к электронной документации [Кстати говоря, пакет форм Windows автоматически опознает операции с колесом мыши и обеспечивает прокрутку формы/элемента там, где это имеет смысл.
-
Графическое программирование в .NET Framework полностью отличается от всего, что было реализовано в прежних версиях VB. Знакомые графические команды (частично позаимствованные еще из QuickBasic) исчезли.
-
Рассмотрим очень простой пример графического вывода. Следующая программа выводит растровый файл sample.bmp (находящийся в каталоге \bin решения) в левом верхнем углу формы: | Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs) | MyBase.OnPaint(e) | Dim g As Graphics | g = e.Graphics() | g.Draw!mage(New Bitmap("sample.bmp"). 0.
-
Метод DrawString объекта Graphics предназначен для вывода текста. При вызове этого метода задается объект шрифта, цвет, кисть и начальная точка вывода. Например, следующий фрагмент выводит текст "Hello World" – в современных книгах по программированию это превратилось в традицию (рис. 8.23).
-
Для демонстрации вывода текста была написана программа, которая воспроизводит в графическом поле все установленные шрифты с указанием имен (попутно мы столкнулись с проблемой, описанной в конце раздела). Программа состоит из нестандартного элемента и формы с прокруткой (рис. 8.24). | Рис. 8.24.
-
Печать в .NET – дело непростое, однако богатство возможностей окупает все хлопоты. В этом разделе мы подробно опишем процесс печати одной страницы (в основном на примере автоматически сгенерированного кода), а затем покажем, как напечатать несколько страниц.
-
Процесс многостраничной печати основан на небольшой хитрости: если процедура обработки события PrintPage задает свойству HasMorePages объекта PrintPageEventArgs значение True, то объект PrintDocument узнает о наличии дополнительных страниц для печати и автоматически инициирует заново событие PagePrint. | Проблемы, возникающие при многостраничной печати, имеют мало общего с самой печатью.
-
Пользователь программы должен иметь возможность выбрать принтер и внести другие изменения в конфигурацию печати. Такую возможность предоставляет элемент PrintDialog.
-
Печать простейших документов в VB.NET требует несколько больших усилий, чем в VB6, зато режим предварительного просмотра реализуется гораздо проще. Для этого от вас потребуется лишь назначить объект PrintDocument свойству Document экземпляра PrintPreviewDialog.