В VB6 из UserControl к его контейнеру доступ осуществлялся просто через Ambient. Т.е. в UserControl_InitProperties, например, можно было написать что-то вроде:
Dim objMyObject as MyObject
Set objMyObject = Ambient.ContainersSpecialObject
и всё прекрасно возвращалось.
Как сделать подобное в VB.NET? Получить надо объект, выставленный контейнером как Ambient-свойство. В VB6 пробовал — работает. Контейнер контрола — не VB-приложение.
Спасибо!
"Wrangler" <43800@users.rsdn.ru> schrieb im Newsbeitrag
news:1275557@news.rsdn.ru...
>В VB6 из UserControl к его контейнеру доступ осуществлялся просто через Ambient. Т.е. в UserControl_InitProperties, например, можно было написать что-то вроде:
>
> > Dim objMyObject as MyObject
> Set objMyObject = Ambient.ContainersSpecialObject
>
>
> и всё прекрасно возвращалось.
>
> Как сделать подобное в VB.NET? Получить надо объект, выставленный контейнером как Ambient-свойство. В VB6 пробовал — работает. Контейнер контрола — не VB-приложение.
Бери Parent:
Trace.WriteLine(Me.Parent.Name)
Peter
Posted via RSDN NNTP Server 1.9
Здравствуйте, Peter Fleischer, Вы писали:
PF>Бери Parent:
PF>Trace.WriteLine(Me.Parent.Name)
Спасибо, но того, что надо не получается. Т.е. возвращается Nothing. Я ещё не со всем этим разобрался, но, видимо, дело в том, что мой ActiveX контрол встраивается в контейнер не в Design-time, а при запуске программы, содержащей контейнер. Происходит это так.
После сборки контрола в его Implemented categories в реестре добавляется ClassID категории, являющейся его контейнером, т.е. получается так:
\\HKCR\CLSID\{my-ActiveX-control-clsid}\Implemented Categories\{container-category-classid}
После запуска, как я понял, программа находит в реестре своего клиента, создаёт для него контейнер, помещает клиента туда и запускает его.
Например, если нужное свойство контейнер а называется NeedsObject, то в VB6 у меня был следующий код:
Private m_objMyObject as NeedsObject
Private Sub UserControl_InitProperties()
On Error GoTo PROC_ERR
' Control Properties initialization
m_BackColor = LNG_BACKCOLOR
' ...
Set m_objMyObject = UserControl.Ambient.NeedsObject
lblMyText.Caption = m_objMyObject.Caption
' etc.
Exit Sub
PROC_ERR:
MsgBox "UserControl_InitProperties error: """ & Err.Description & """."
End Sub
При этом во время сборки проекта ни о каких ошибках VB не сообщал. Если же я пытаюсь сделать в VB.NET что-то вроде
Private m_objMyObject as NeedsObject
Public Sub New()
MyBase.New()
'This call is required by the Windows Form Designer.
InitializeComponent()
'Add any initialization after the InitializeComponent() call
m_objMyObject = Me.Parent.NeedsObject
End Sub
то сразу получаю ошибку. ЧТо я делаю не так? И как надо?