簡體   English   中英

可以從組成用戶控件中訪問ParentForm的Settings屬性,以修改此類設置嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM