Классы и объекты для начинающих. Часть 2

Всем приходилось сталкиваться с ситуаций, когда одно или несколько действий нуждается в многократном повторении. (Процедуры - подумал Штирлиц) Нет , не процедуры. Точнее встречаются ситуации, в которых процедуры неудобны. К примеру - вам хочется подкрасить поле ввода ярким цветом, но не забыть вернуть цвет на место, когда фокус перешел к другому полю ввода.

Или совершенно классический пример. Контрол никогда не знает, какой контрол до него имел фокус.

А это бывает необходимо. Выход то есть, он заложен в эвентно управляемую среду Windows - достаточно отследить событие и правильно на него отреагировать. Т.е. в первом примере вам надо добавить код перекрашивающий контрол в событие Got Focus и код возвращающий цвет обратно в событие Lost Focus. Во втором случае надо на событие Lost Focus запоминать какой контрол имел фокус в паблик переменной уровня модуля. Все просто, не так ли? Только лень прописывать код во все контролы. К тому же форма в которой десятка полтора полей ввода - вообще норма. А нередко их вдвое-втрое больше. Выход есть. Рассмотрите подробненько этот пример кода на Visual Basic.

Он состоит из класс модуля Class1 , обычного модуля и формы с кнопкой и четырьмя текстбоксами.

Форма:
Option Explicit
Private clsTextBox1 As New Class1
Private clsTextBox2 As New Class1
Private clsTextBox3 As New Class1
Private clsTextBox4 As New Class1
Private Sub Command1_Click()
MsgBox "Return Focus in Previos Control"
PrevControl.SetFocus
End Sub Private

Sub Form_Load()
Set clsTextBox1.TextBoxCtl = Text1
Set clsTextBox2.TextBoxCtl = Text2
Set clsTextBox3.TextBoxCtl = Text3
Set clsTextBox4.TextBoxCtl = Text4
End Sub

Модуль :

Public PrevControl as Control

Class Module

Option Explicit
Private WithEvents txt As TextBox
'Это означает что txt будет обрабатывать все эвенты тектсбокса.

Public Property Set TextBoxCtl(OutsideTextBox As TextBox)
Set txt = OutsideTextBox
End Property
Private Sub txt_GotFocus()
txt.BackColor = vbBlue
End Sub Private
Private Sub txt_LostFocus()
txt.BackColor = vbWhite
Set PrevControl = txt
End Sub Private
Sub txt_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
txt.ToolTipText = "X:" & X & " Y:" & Y
End Sub

Что мы имеем в результате: Все текстбоксы меняют цвет в соотвествии с поставленной задачей. Эвенты класса случаются После аналогичных эвентов самих контролов.(что открывает и другие возможности по управлению програмой)
Минусы - лишний расход ресурсов при создании обьектов. Правда при цене доллар на мегабайт памяти с этим можно смирится.

 


Страница сайта http://www.silicontaiga.ru
Оригинал находится по адресу http://www.silicontaiga.ru/home.asp?artId=6474