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

.net 如何知道何时不再使用UserControl(无关闭事件),.net,winforms,user-controls,.net,Winforms,User Controls,我在WinForm中使用UserControls来显示数据。 我还使用了命令模式,以便UserControl注册一个(弱)事件,并在命令触发时执行一些操作 在WinForm上,我可以在Close事件中注销事件。但是,UserControl上没有此类事件。 我连接了当UserControl不再在显示堆栈中,但找不到任何有用的内容时,我认为会触发的事件。 为了解决这个问题,我检查了父项是否为空,这在大多数情况下都有效 现在我想要另一个UserControl的子UserControl(将UserCon

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

WinForm
上,我可以在
Close
事件中注销事件。但是,
UserControl
上没有此类事件。 我连接了当
UserControl
不再在显示堆栈中,但找不到任何有用的内容时,我认为会触发的事件。 为了解决这个问题,我检查了
父项
是否为空,这在大多数情况下都有效

现在我想要另一个
UserControl
的子
UserControl
(将
UserControl
放在
TabControl
中),当父控件不再显示时,子控件的
Parent
属性不再为null

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

到目前为止,我所尝试的:
Dispose()
不会立即被系统调用,因此没有任何用处<代码>可见
也不会被系统更新;没有触发
关闭
卸载
事件


干杯。

控件上有一个HandleDestroyed事件可能适合您。

它实际上是Dispose()方法。如果没有足够早地调用它,那么使用该控件的代码中就有一个bug。例如,使用Controls.Clear()或Controls.Remove()


控件的父控件总是迭代其控件集合,并在释放时释放子控件。这使处理自动进行,从窗体的Dispose()开始,该操作在窗体关闭时运行。但是,当您自己移除控件时,它不是自动的

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


棘手的部分是知道何时调用ParentForm。首次创建用户控件时未设置它。有时我重写OnLayout处理程序和监视器,直到ParentForm不为null。

我自己添加和删除UserControl。没有Disposed事件,并且Dispose方法已在设计器代码中被重写,因此我没有挂钩将自己的代码放在那里。请将Dispose方法重写从designer.cs文件剪切并粘贴到代码文件中。设计器文件的少数有效编辑之一,它位于标记为“Component designer generated code”的区域之前。我不知道将Dispose()方法放在主类文件中是可以接受的。那看起来是正确的选择。在一个选项卡中有两个控件并检查当前控件是否处于活动状态,这并不能解决我的问题,但我想我必须自己编写代码。是的,但要小心。看见