繁体   English   中英

Winforms中的VB.Net UserControl关闭事件

[英]VB.Net UserControl Closing Event in Winforms

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

我的问题是速度问题,我正在通过表单内的用户控件加载控件。 现在,我的问题是,通过使该控件的一个实例显示在该选项卡组控件内部的面板控件中,然后将该控件的实例添加到选项卡组控件中,然后在隐藏该控件时清除该控件,来创建控件。

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

因此,在清除控件时,需要在RxClaimGridControl内部调用SaveLayout方法。 但是没有事件(至少我可以找到)在删除/关闭/隐藏用户控件时触发。

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

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

重写UserControl的DisposeOnHandleDestroyed方法。

我在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年前提出的,但我认为这种解决方案很好。

我相信您从错误的位置调用了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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM