Иерархия пространства имен System.Windows.Forms
Рассмотрев простейшие возможности использования пространства имен Windows . Forms на конкретных примерах, мы переходим к иерархии классов, показанной на рис. 8.20.
Диаграмма выглядит весьма устрашающе, но мы уделим основное внимание главной линии наследования:
System.ComponentModel .Component > Control
Из рис. 8.20 видно, что классы форм и элементов являются производными от класса Control. Например, генеалогия класса Form выглядит так:
ScrollableControl
>ContainerControl
> Form
Рис. 8.20. Иерархия классов пространства имен Windows.Forms
Текстовое поле входит в другую ветвь:
Control
> TextBoxBase
> RichTextBox
> TextBox
Иерархия основных разновидностей кнопочных элементов выглядит так:
Control
> ButtonBase
> Button
> CheckBox
> RadioButton
Класс Control вмещает в себя наибольшее количество функций (более 300) и обладает наибольшими функциональными возможностями. Классы форм и элементов объявляются производными от членов класса Control.
Данная глава дает лишь начальное представление о Windows.Forms. Чтобы овладеть возможностями этого пространства имен на профессиональном уровне, необходимо тщательно изучить электронную документацию и, возможно, купить более специализированную книгу.
Класс Component является базовым классом для всех компонентов пространства имен System. Wi ndows. Forms. В нем собраны члены, необходимые для реализации включения (в частности, размещения элементов на форме или дочерних окон MDI в родительском окне MDI). В основном они реализованы в виде методов интерфейса IComponent. Поскольку класс Component также занимается освобождением ресурсов, расходуемых при визуальной разработке, он реализует IDisposable.
Поскольку класс Control является базовым для элементов и форм, он поддерживает многие операции пользовательского интерфейса, в том числе обработку событий клавиатуры и мыши. Кроме того, он определяет цвет, позицию и размер формы или элемента.
Использование средств базового класса Control (и в частности, обработка ключевых событий) рассматривается в следующем разделе.
Тем не менее сначала мы продолжим путь к формам в иерархии классов System. Windows. Forms. Поскольку среди предков класса Form числится ScrollableControl, формы VB обладают полезной особенностью, которую оценит каждый, кто пытался реализовать форму с прокруткой в VB6:
При выходе за грашцы текущего содержимого форма автоматически прокручивается. Взгляните на рис. 8.21 — на нем изображена форма, позволяющая прокручивать очень большую фрактальную картинку (более 5 Мбайт в запакованном виде!) с базовым множеством Мандельброта. За информацией о множестве Мандельброта обращайтесь по адресу www.olympus.net/personal/dewey/mandelbrot.html.
Прокрутку форм можно протестировать на любом изображении достаточно больших размеров:
Рис. 8.21. Прокрутка изображения базового множество Мандельброта
1 Private Sub Forml_Load(ByVal sender As System.Object,_
ByVal e As System.EventArgs)Handles MyBase.Load
2 Me.AutoScroll = True
3 Me.VScroll = True
4 Me.HScroll = True
5 Dim aBigBox As Rectangle = Rectangle.Inflate _
6 (Me.ClientRectangle. 6. 6)
7 PictureBoxl.Bounds = aBigBox
8 ' Предполагается, что графический файл находится в подкаталоге \bin
9 PictureBoxl.Image = Image.FromFile("Mandelbrot Set.bmp")
10 End Sub
Главное место в этом листинге занимает строка 2, в которой свойству AutoScrol 1, определяемому в классе Scrollabl e Control, задается значение True. Без этого прокрутка работать не будет. Строки 3 и 4 указывают на то, что в окне должны отображаться обе полосы прокрутки (вертикальная и горизонтальная). В строке 5 общий метод класса System.Drawing.Rectangle создает прямоугольный объект, в 6 раз больший клиентской области формы. Строка 7 приводит графическое поле к заданному размеру, присваивая прямоугольник свойству Bounds, присутствующему во всех элементах. Как указано в комментарии, строка 9 предполагает, что файл с растровым изображением находится в подкаталоге \bin каталога решения — в реальной программе для определения местонахождения файла следовало бы вызвать диалоговое окно Open File.