[英]Can the ParentForm's Settings property be accessed from a constituent user control, in order to modify such a setting?
使窗體的位置持久化並不是太困難,因此可以將其重新定位在重新啟動的位置:
Private Sub FlatForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Location = My.Settings.Location
End Sub
Private Sub FlatForm_LocationChanged(sender As Object, e As EventArgs) Handles Me.LocationChanged
My.Settings.Location = Location
End Sub
Private Sub FlatForm_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed
My.Settings.Save()
End Sub
但是,我在許多應用程序上都放置了一個用戶控件,因此我在考慮攔截父項的相應事件,以便自動將它們作為服務來執行。
例如,對於Disposed
事件:
Private Sub MyUserControl_Load(sender As Object, e As EventArgs) Handles MyBase.Load
AddHandler ParentForm.Disposed, AddressOf ParentDisposed
End Sub
但是我不知道如何在處理程序中訪問父窗體的Settings
屬性:
Private Sub ParentDisposed(sender As Object, e As EventArgs)
?
End Sub
當然,我不能添加My.Settings.Save()
,因為我不想保存用戶控件的位置,而是將父窗體的位置保存在其自己的文件夾中。
這可能嗎,還是需要我以完全不同的方式來做?
感謝用戶Visual Vincent的評論,這是一個可行的解決方案。
如果已將用戶控件放在Windows窗體上,則可以進行自動窗體跟蹤,包括調用之間的持久性。
在控件的Load
事件中,將檢索此屬性並將其應用於父窗體。 注意,我們在編碼控件的事件,而不是客戶端窗體的事件。 這意味着,可能已經顯示了客戶端表單(是的,甚至在Load
事件結束之前也是如此),具體取決於您在表單中執行的操作。 這意味着,我們應該將相應的代碼放在事件的最頂端。
父母的位置應該被更新並保存在Disposed
事件中,這似乎很自然,但是到達該位置時,對ParentForm
的引用已經Nothing
了。 如果父級的Disposed
事件由控件通過AddHandler
處理,則也是如此。 相反,我們必須使用父級的攔截的LocationChanged
事件來跟蹤表單的移動並保持屬性為最新。
Private Sub MyControl_Load(sender As Object, e As EventArgs) _
Handles MyBase.Load
'Retrieve the parent form's Location setting and apply it.
ParentForm.Location = My.Settings.Location
'Intercept the parent's LocationChanged event, so that its Location
'property can be updated.
AddHandler ParentForm.LocationChanged, AddressOf ParentLocationChanged
...
End Sub
'This routine is called, when the parent form is moved. It is intercepted in
'order to update the application's Location setting.
Private Sub ParentLocationChanged(sender As Object, e As EventArgs)
My.Settings.Location = ParentForm.Location
End Sub
它在控件的Dispose
事件中,在其中存儲設置,包括Location
設置。
您可能要選擇退出,並讓客戶端僅保存自己的設置。
'When done, the application's settings are saved.
Private Sub MyControl_Disposed(sender As Object, e As EventArgs) _
Handles Me.Disposed
My.Settings.Save()
End Sub
從現在開始,當將這樣的控件放置在Form控件上時,它還會自動監視其運動並在兩個會話之間持久存儲表單的位置。
Parent
財產:
YourControle.Parent.Location
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.