Cамоучитель по VB.NET


               вакансии для девушек Пермь

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


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


Класс 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, и при работе с ними следует помнить о некоторых нюансах.