在表单中处理自定义内存中控件

Disposing of custom in-memory controls in a form

我有一个 Form(好吧,我的 window,它继承自 Form),我想在这里创建一些控件,然后在整个代码中引用它们class.

所以我创建字段:

private Label _someCounter;
private Label _someAnotherCounter;

我初始化它们,随心所欲地使用它们,这很棒。

但我还需要记住 处理 它们,问题是:我该怎么做?我可以想到三种方法:

  1. 我在Dispose覆盖方法中写了一些代码,由设计者生成(因为设计者可能会在某些时候覆盖它,我不喜欢这个想法)。

  2. 我在 class 中找到了 copmonents 字段,该字段由生成的 Dispose 覆盖处理,所以我只需将这些控件添加到 copmonents收集,所以它们会自动处理。

  3. 毕竟,我也在想,毕竟我把它们添加到我的界面中,所以它们还是添加到component中。所以我不需要做任何事情。

好的,所以你可以创建虚拟 class:

public class MyLabel : Label
{
  protected override void Dispose(bool disposing)
  {
    base.Dispose(disposing);
  }
}

并且可以在Dispose方法中设置断点。

将字段的类型更改为 MyLabel 并检查是否调用了该方法,并且在我没有明确调用它们或做任何事情的情况下调用了它。

所以第三种方法是正确的 - 因为它们是作为 Form 控件添加的,所以它们会自动处理。