.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()方法放在主类文件中是可以接受的。那看起来是正确的选择。在一个选项卡中有两个控件并检查当前控件是否处于活动状态,这并不能解决我的问题,但我想我必须自己编写代码。是的,但要小心。看见