Главная. Учебники по программам для графики и дизайна!! Главная страница сайта.

 

Добавление новых свойств

На следующем шаге класс будет дополнен свойствами 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 в окне свойств

Как видите, нестандартное свойство отображается в окне свойств, а свойства MaxValue и MinValue выводятся с начальными значениями, которые им были присвоены. Еще интереснее то, что окно свойств отвергает любые попытки изменения свойств способом, запрещенным в программе (например, присваивание MinValue значения, меньшего 1).

Чтобы свойство не отображалось в окне свойств, достаточно установить для него атрибут <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

Рассмотрев простейшие возможности использования пространства имен 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.

Прокрутку форм можно протестировать на любом изображении достаточно больших размеров:

  1. Разместите на форме графическое поле и задайте его свойству SizeMode значение AutoSize.
  2. Найдите большой графический файл.

Рис. 8.21. Прокрутка изображения базового множество Мандельброта

  1. Приведите процедуру Form_Load к следующему виду:

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.

 

Средства базового класса Control

Класс Control содержит более 300 членов, и описать их все (или хотя бы большую часть) в одной главе просто невозможно. Следовательно, вам все равно придется обратиться к электронной документации [ Кстати говоря, пакет форм Windows автоматически опознает операции с колесом мыши и обеспечивает прокрутку формы/элемента там, где это имеет смысл. Таким образом, в большинстве случаев вам не придется использовать новое событие Control.MouseWheel. ]. Однако события клавиатуры и события проверки, занимающие важное место в работе элементов, несколько отличаются от своих прототипов из VB6, и при работе с ними следует помнить о некоторых нюансах.

Hosted by uCoz