【发布时间】:2018-03-22 21:04:27
【问题描述】:
我正在使用 Windows 窗体。
我的 C# 应用程序包含 100 个user controls。我会在需要时显示/隐藏这 100 个 user controls 中的一个并隐藏其余的。
每个user controls 都有30 个buttons,我在构造函数中订阅button 事件,如下所示:
public UserControl1()
{
InitializeComponent();
button1.Click += new EventHandler(MyButtonClick);
button2.Click += new EventHandler(MyButtonClick);
.
.
button30.Click += new EventHandler(MyButtonClick);
}
void MyButtonClick(object sender, EventArgs e)
{
// do something
}
因此,当我运行应用程序时,所有 100 个User controls 都订阅了 30 个buttons 事件,一些user controls 订阅了该事件,但它们在应用程序的使用过程中从未使用过。
我读到了一些关于取消订阅事件here 和Here 的内容,但有些答案说你应该取消订阅,因为它会导致内存泄漏,有些人说你不必这样做,因此答案仍然不清楚。
我的问题是我是否必须在使用 button 事件后取消订阅它,例如:当我显示/隐藏 user control 时。如果是,我如何在显示user control 时订阅button 事件并在未显示时取消订阅。
【问题讨论】:
-
难道没有可以用来分别附加/分离事件处理程序的显示/隐藏事件吗?
-
@PeteGO 我现在看了看,我什至没有发现
-
您可以使用
IsVisibleChanged事件。
标签: c#