سلام
چطور میتونم ParentForm رو در یه Component پیدا کنم؟
قاعدتا یک Component صرفا یک شیء است که داخل کلاس Form قرار می گیرد، نه روی پنجره Form و ارتباطی نظیر ParentForm برای آن بی معنا است.
اما به هر حال زمانی که یک Component را هنگام طراحی فرم رویش قرار می دهیم، یکبار و فقط همان یکبار مشخصه Site این فرصت را دارد که
فرم را شناسایی کند. از آنجایی که این موقعیت دیگر تکرار نمی شود، باید همان موقع Form را در مشخصه ای ذخیره کرد، وگرنه بعدا امکان دسترسی
به آن نیست.
مشخصه ای که برای ذخیره سازی Form بکار می رود :
کد:
Private _containerControl As ContainerControl
Public Property ContainerControl() As ContainerControl
Get
Return _containerControl
End Get
Set(ByVal value As ContainerControl)
_containerControl = value
End Set
End Property
مشخصه Site را Overrides می کنیم تا آن لحظه قرار گرفتن Component روی فرم را در حالت طراحی فرم از دست ندهیم :
کد:
Public Overrides Property Site() As System.ComponentModel.ISite
Get
Return MyBase.Site
End Get
Set(ByVal value As System.ComponentModel.ISite)
MyBase.Site = value
If value IsNot Nothing Then
Dim service As System.ComponentModel.Design.IDesignerHost
service = value.GetService(GetType(System.ComponentModel.Design.IDesignerHost))
If service IsNot Nothing Then
If TypeOf service.RootComponent Is ContainerControl Then
_containerControl = service.RootComponent
End If
End If
End If
End Set
End Property
حالا اگر در فرم فایل Designer.vb اش را ببینید، موقع قرار گرفتن Component روی فرم این مشخصه ContainerControl که ایجاد کرده ایم مقدار دهی می شود :
کد:
'
'Component11
'
Me.Component11.ContainerControl = Me
'