Tosa: из вашего комментария на Ответ AngryHacker , я думаю, что вы проверяете контейнер неправильно.
Ваш код такой
' BAD CODE '
If ctrl.Container = fraMovies Then
Для меня это дает ошибку 450 Wrong number of arguments or invalid property assignment
. Вы получаете ту же ошибку?
Код должен использовать Is
вместо =
, как это
' GOOD CODE '
If ctrl.Container Is fraMovies Then
Объяснение. Вы хотите проверить, указывают ли две переменные на один и тот же элемент управления. Элементы управления являются объектами: вы должны использовать Is
, а не =
, чтобы проверить, указывают ли две переменные объекта на один и тот же объект. Это классическая ловушка в VB6.
Последнее слово. В следующий раз, не могли бы вы попытаться опубликовать 10 или менее строк фактического кода, воспроизводящего ошибку, и указать точный номер ошибки, сообщение и точную строку, в которой она произошла? Нам действительно легче решить вашу проблему - я знаю, что вам нужно сократить код, но вы получите лучшие ответы таким образом.
РЕДАКТИРОВАТЬ С возвращением! :) Вы сказали, что некоторые элементы управления не имеют свойства контейнера. Вы можете попробовать обернуть тест в On Error Resume Next
, что-то вроде этого.
' GOOD CODE '
Dim bMatch As Boolean
Dim ctrl As Control
For Each ctrl In Me.Controls
bMatch = False
On Error Resume Next
bMatch = (ctrl.Container Is fraMovies)
On Error Goto 0
If bMatch Then
ctrl.Enabled = True
End If
Next