У меня есть COM-видимый способ, который выглядит примерно следующим:Проблемы прохождения в UserControl в качестве параметра в VB6
Public Sub SomeMethod(someControl as Object)
On Error Goto ErrHandler
Dim someSpecificControl as SpecificControl
MsgBox TypeOf someControl is Control
MsgBox TypeOf someControl is SpecificControl
On Error Resume Next
Set someSpecificControl = someControl
On Error Goto ErrHandler
if someSpecificControl is Nothing then
Exit Sub
end if
' do stuff to the control
End Sub
Другие компоненты будут вызывать этот метод (т.е. через COM) и передать в управление типа SpecificControl
.
Моя проблема заключается в том, что при запуске через отладчик параметризованный элемент управления, похоже, не имеет правильного типа, то есть он выходит из подпрограммы после сбоя «cast», когда я ожидал, что это не так.
Использование TypeOf
Я проверил, что параметризованный объект имеет тип Control (как указано выше), но я не могу понять, почему он был передан - по-видимому - неправильно. Кажется, он ведет себя корректно, когда запускается за пределами отладчика, но я не могу быть уверен (отсюда этот вопрос).
Может ли кто-нибудь пролить свет на это? Может ли контроль быть каким-то образом поврежден в процессе боксирования-распаковки? Есть ли лучший способ сделать это?
Edit: я использовал TypeName
как предложил Крис Эриксон и получил некоторые интересные результаты:
MsgBox TypeName(someControl)
MsgBox "someControl is of type SpecificControl: " & TypeOf someControl is SpecificControl
MsgBox "someControl is of type UserControl: " & TypeOf someControl is UserControl
MsgBox "someControl is of type Control: " & TypeOf someControl is Control
я получаю:
SpecificControl
someControl is of type SpecificControl: False
someControl is of type UserControl: False
someControl is of type Control: True
Я думаю, единственный способ, которым я есть вокруг этого, чтобы избежать прохождения в UserControl в качестве параметра.
Наверное, лучше, чем я стараюсь избегать передачи элемента управления в качестве параметра в первую очередь. Благодаря! – jpoh