我在UserControl
内使用WinForm
来显示数据。
我也使用命令模式,以便UserControl
注册一个(弱)事件,并在触发命令时执行操作。
在WinForm
我可以取消注册Close
事件中的事件。但是UserControl
上没有此类事件。
当UserControl
不再在显示堆栈中但却找不到任何有用的东西时,我联系了我认为会被触发的事件。
为了解决这个问题,我检查Parent
是否为空,并且对大多数情况都有效。
现在我想要另一个UserControl
的孩子UserControl
(将UserControl
放入TabControl
)并且Parent
属性不是'当父节点不再显示时,对于子控件将变为null。
有没有办法知道是否使用了UserControl
?
到目前为止我已尝试过:Dispose()
不会被系统直接调用,因此没有用;系统不会更新IsVisible
;没有Close
或Unload
事件被触发。
干杯。
答案 0 :(得分:3)
Control上有一个HandleDestroyed事件,可能对您有用。
答案 1 :(得分:1)
它确实是Dispose()方法。如果它没有得到足够早的调用,则代码中存在使用该控件的错误。例如,使用Controls.Clear()或Controls.Remove()。
控件的父级总是迭代其Controls集合,并在子控件被释放时处置它们。这使得自动处理,从表单的Dispose()开始,在表单关闭时运行。但是,当您自己删除控件时,不是自动的。
答案 2 :(得分:0)
在过去,我通过获取父窗体(使用Control.ParentForm)然后直接连接到FormClosing事件来处理此问题。
棘手的部分是知道何时调用ParentForm。首次创建用户控件时,不会设置它。有时我会覆盖OnLayout处理程序并监视,直到ParentForm不为空。