Добавление новых свойств
На следующем шаге класс будет дополнен свойствами MinValue и MaxValue. Программная реализация этих свойств выглядит весьма прямолинейно. При создании экземпляра переменным присваиваются значения 1 и максимальное значение типа Long соответственно. В дальнейшем необходимо проследить за тем, чтобы свойство MinValue не оказалось меньше 1, а свойство MaxVal ue не превышало предельной величины:
Private m_Min As Long = 1 Private m_Max As Long = Long.MaxValue Public Property MinValue()As Long Get
Return m_Min End Get SetCByVal Value As Long)
m_Min = Math.Maxd,Value) End Set End Property
Public Property MaxValue()As Long Get
Return m_Max End Get Set(ByVal Value As Long)
m_Max =Math.Min(m_Min.Value) End Set End Property
Если включить этот код в проект и откомпилировать его, свойство будет поддерживаться элементом, но не будет отображаться в окне свойств. Проблема решается установкой атрибута Browsable для имени свойства:
<Browsable(True)> Public Property MinValue
Примерный вид окна свойств при установке атрибута Browsable для свойств MinValue и MaxValue показан на рис. 8.18.
Рис.
8.18. Свойства MaxValue и MinValue в окне свойств
Чтобы свойство не отображалось в окне свойств, достаточно установить для него атрибут <Browsable(False)>. Запрет может устанавливаться как для новых, так и для переопределяемых свойств. Например, следующий фрагмент убирает стандартное свойство Text специализированного текстового поля из окна свойств:
<Browsable(False)> Public Overrides Property Text() As String Get
Return MyBase.Text End Get Set(ByVal Value As String)
MyBase.Text = Value End Set End Property
Как видно из рис. 8.19, свойство Text перестает отображаться в окне свойств.
Рис.
8.19. При установке атрибута Browsable свойство Text не отображается
Иерархия
пространства имен System.Windows.Forms
Диаграмма выглядит весьма устрашающе, но мы уделим основное внимание главной линии наследования:
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.
Класс 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.
Прокрутку форм можно протестировать на любом изображении достаточно больших размеров:
- Разместите на форме
графическое поле и задайте его свойству SizeMode значение AutoSize.
- Найдите большой
графический файл.
Рис.
8.21. Прокрутка изображения базового множество Мандельброта
- Приведите процедуру
Form_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.
Средства
базового класса Control
Назад | Начало | Вперед |