VB中的VB.Net UserControl关闭事件

时间:2010-03-04 16:43:19

标签: .net vb.net winforms events

我正在尝试从DevExpress网格控件中保存一些布局,以便用户可以在以后使用控件时更改布局并重新加载它们。

我的问题是速度问题我通过窗体内的用户控件加载控件。现在我的问题是我通过在选项卡可见时将控件实例添加到选项卡式组控件内的面板控件来创建控件,然后在隐藏控件时清除控件。

    If ClaimsGridPanelControl.Visible = True Then
            ClaimsGridPanelControl.Controls.Add(New RXClaimsGridControl(ClaimsBindingSource))
    Else
            ClaimsGridPanelControl.Controls.Clear()
    End If

所以在RxClaimGridControl里面我需要在清除控件时调用SaveLayout方法。但是,在删除/关闭/隐藏用户控件时,没有任何事件,至少是我能找到的事件。

我对处理.Clear()的想法是在父控件中引发一个事件,然后在用户控件内处理该事件。

是否有一些关于删除/关闭/隐藏用户控件的事件,或者有更好的方法来执行此操作。

3 个答案:

答案 0 :(得分:2)

覆盖UserControl的DisposeOnHandleDestroyed方法。

答案 1 :(得分:1)

我在http://lukhezo.com/2007/10/10/usercontrol-closing-event/

找到了这个
Protected Overloads Overrides Sub OnCreateControl()

    MyBase.OnCreateControl()

    AddHandler Me.ParentForm.FormClosing, AddressOf ParentForm_FormClosing

End Sub

Private Sub ParentForm_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs)

    If MessageBox.Show("Would you like to close the parent form?", "Close parent form?", _

                       MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.No Then

        e.Cancel = True

    End If

End Sub

然后您可以在ParentForm_FormClosing事件中调用client.Close()(或您想要的任何操作)而不是MessageBox.Show()

我的评论:您可以将AddHandler语句放在UserControl Load事件中。

虽然这个问题是5年前提出的,但我认为这个解决方案很好。

答案 2 :(得分:0)

我相信你是从错误的地方调用SaveLayout()。只有在对DXGrid本身进行更改并且与面板无关时才应保存布局。

您可以通过处理

来实现这一目标
GridView_ShowCustomizationForm

示例代码

  Private Sub GridView_ShowCustomizationForm(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GridView.ShowCustomizationForm
    Dim gView As DevExpress.XtraGrid.Views.Grid.GridView = CType(sender, DevExpress.XtraGrid.Views.Grid.GridView)
    AddHandler gView.CustomizationForm.FormClosing, AddressOf SaveGridSettings
End Sub

Private Sub SaveGridSettings()

 Grid.MainView.SaveLayoutToXml("c:\Settings.xml")

End Sub