如何知道何时不再使用UserControl(无关闭事件)

时间:2011-08-31 11:03:20

标签: .net winforms user-controls

我在UserControl内使用WinForm来显示数据。 我也使用命令模式,以便UserControl注册一个(弱)事件,并在触发命令时执行操作。

WinForm我可以取消注册Close事件中的事件。但是UserControl上没有此类事件。 当UserControl不再在显示堆栈中但却找不到任何有用的东西时,我联系了我认为会被触发的事件。 为了解决这个问题,我检查Parent是否为空,并且对大多数情况都有效。

现在我想要另一个UserControl的孩子UserControl(将UserControl放入TabControl)并且Parent属性不是'当父节点不再显示时,对于子控件将变为null。

有没有办法知道是否使用了UserControl

到目前为止我已尝试过:Dispose()不会被系统直接调用,因此没有用;系统不会更新IsVisible;没有CloseUnload事件被触发。

干杯。

3 个答案:

答案 0 :(得分:3)

Control上有一个HandleDestroyed事件,可能对您有用。

答案 1 :(得分:1)

它确实是Dispose()方法。如果它没有得到足够早的调用,则代码中存在使用该控件的错误。例如,使用Controls.Clear()或Controls.Remove()。

控件的父级总是迭代其Controls集合,并在子控件被释放时处置它们。这使得自动处理,从表单的Dispose()开始,在表单关闭时运行。但是,当您自己删除控件时,是自动的。

答案 2 :(得分:0)

在过去,我通过获取父窗体(使用Control.ParentForm)然后直接连接到FormClosing事件来处理此问题。

棘手的部分是知道何时调用ParentForm。首次创建用户控件时,不会设置它。有时我会覆盖OnLayout处理程序并监视,直到ParentForm不为空。