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

标签 c# winforms controls dispose

<分区>

我有一个 Form(好吧,我的窗口,它继承自 Form),我想在其中创建一些控件,然后在整个代码中引用它们类。

所以我创建字段:

private Label _someCounter;
private Label _someAnotherCounter;

我初始化它们,根据需要使用它们,这很棒。

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

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

  2. 我在一个类中找到了 copmonents 字段,该字段由生成的 Dispose 重写处理,所以我只需将这些控件添加到 copmonents 收集,因此它们会自动处理。

  3. 毕竟,我也在想,毕竟我将它们添加到我的界面中,所以无论如何它们都会添加到组件中。所以我不需要做任何事情。

最佳答案

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

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

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

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

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

关于c# - 在表单中处理自定义内存中控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58281328/

相关文章:

c# - CSharp .NET 3.5 Windows 窗体数据绑定(bind)组合框到列表<>

c# - 只捕获表格一部分的屏幕截图?

c# - 使用键盘快捷键从系统托盘最大化 C# 应用程序

c# - WPF - Databind动态控件类型

c# - System.Text.Json.JsonSerializer.Serialize 返回空 Json 对象 "{}"

c# - 在 iis 托管的 wcf 服务中传递文化值(value)

c# - C# 的 TreeView /文件 View 控件

c++ - "Not all controlpaths return a value"/"control may reach end of non void function"使用 while 循环验证时?

javascript - Kendo Grid 中的日期字段在 Controller 上为空

c# - Entity Framework 4.1 Code First - 使用 LinqKit PredicateBuilder 时忽略包含