СообЧа > База Знаний > Программирование > Visual Basic > Формы и элементы управления

Вопрос

Многоуважаемые, как вызвать метод Validate для каждого TextBox-a на форме? Боксов штук 15, все с разными именами.
У каждого бокса уже есть свой обработчик txtXXX_Validate, так вот их и надо вызвать все по очереди. По идее, этот эвент стреляет при потере боксом фокуса, но если делать программно txtXXX1.SetFocus:txtXXX2.SetFocus …, то события не происходит :( Так как вызвать это событие программно?

Ответ

Если тебе нужно вызывать процедуры обработки события, то попробуй использовать команду CallByName. Не знаю почему, но она мало известна. Ее даже в русскоязычном хэлпе по VB5 нету. Обработчики события Validate должны быть объявлены Public.

For Each c In Me.Controls
If c.Tag="xxx" Then
CallByName Me, c.Name & "_Validate", vbMethod, False
End If
Next


Вот конечный текст:

Private Function FormIsValid() As Boolean
Dim a As Control, tm As Boolean
tm = False
For Each a In Me.Controls
If (TypeOf a Is TextBox) Then
If a.Enabled Then
CallByName Me, a.Name & "_Validate", VbMethod, tm
If tm Then a.SetFocus: Exit For
End If
End If
Next
FormIsValid = Not tm
End Function


Пример xxx_Validate:

Public Sub txtRSchet_Validate(Cancel As Boolean)
If Len(txtRSchet.Text) <> 20 Then
MsgBox "Неправильный расчетный счет", vbExclamation +
vbOKOnly, "Внимание!"
Cancel = True
End If
End Sub


Сурменок Павел, Андрей, Дмитрий Данелия



Copyright © 2000-2004 Сообщество Чайников
Контактная информация