Классы и объекты для начинающих. Часть 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
Что мы имеем в результате: Все текстбоксы меняют цвет в соотвествии с поставленной задачей. Эвенты класса случаются После аналогичных эвентов самих контролов.(что открывает и другие возможности по управлению програмой) Минусы - лишний расход ресурсов при создании обьектов. Правда при цене доллар на мегабайт памяти с этим можно смирится.
|