
[英]DataBound UserControl and PropertyNameChanged Event problem in .net winforms
[英]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的Dispose
或OnHandleDestroyed
方法。
我在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.