在Closing或Closed事件中配置用户控件?

时间:2015-05-16 18:34:56

标签: .net vb.net winforms

我有一个位图用户控件,应该在表单关闭时处理。在表单的Closing事件,Closed事件或其他地方执行此操作会更好吗?

第2部分: 在用户控件内部,当它的表单关闭时,是应该在Disposed事件中还是在其他地方处置位图?

1 个答案:

答案 0 :(得分:3)

不,表单没有与用户控件的私有成员混淆的业务。通用.NET规则也适用于此,类需要在其自己的Dispose()方法中配置其成员。它将在表单关闭时自动运行,无需任何帮助。

然而,有一个怪癖,UserControl的项目项模板很笨拙。它将Dispose()方法放在控件的Designer.cs文件中。最好的办法是将此方法剪切+粘贴到控件的主源文件中。编辑完方法后,它应该类似于:

    /// <summary> 
    /// Clean up any resources being used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    protected override void Dispose(bool disposing) {
        someBitmap.Dispose();             // <== added
        someOtherBitmap.Dispose();
        if (disposing && (components != null)) {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

有些程序员真的不喜欢修改Designer.cs文件,请注意没有什么可担心的,因为代码在标记为Component Designer generated code的#region之外。另一种方法是使用Disposed事件:

    public UserControl1() {
        InitializeComponent();
        this.Disposed += UserControl1_Disposed;
    }

    void UserControl1_Disposed(object sender, EventArgs e) {
        someBitmap.Dispose();
        someOtherBitmap.Dispose();
    }