【问题标题】:Implement Dispose(bool) on a UserControl在 UserControl 上实现 Dispose(bool)
【发布时间】:2010-01-06 16:04:17
【问题描述】:

当 VS 设计器已经使用 DebuggerNonUserCode 属性实现 Dispose(boolean) 时,如何在 UserControl 上实现 Dispose(boolean)?我对这个方法的修改会被删除吗?

(来自 UserControl.Designer.vb 的代码)

<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)

【问题讨论】:

    标签: .net user-controls dispose visual-studio-designer


    【解决方案1】:

    您需要从设计器文件中删除Dispose 方法并将其添加到您的源文件中。
    您可能还应该删除 DebuggerNonUserCode 属性。

    至少在 C# 中,设计器不会自动将Dispose 放回设计器文件中,如果 VB 设计器这样做,我会感到震惊。

    【讨论】:

      【解决方案2】:

      如果您在 .Designer.vb 文件中对该方法进行修改,它们将不会被覆盖。 DebuggerNonUserCode 属性仅表示如果您正在调试该代码,则不允许您单步执行。它总会越过。

      【讨论】:

        【解决方案3】:

        一种解决方案是将您正在使用的任何一次性类型封装在派生自System.ComponentModel.Component 或实现System.ComponentModel.IComponent 的类中。

        然后您可以将它们添加到由设计器生成的代码实例化的 IContainer 中,它们将与其他组件一起被释放。

        例如

        class MyDisposableComponent : IComponent
        {
            ... implementation
        }
        
        class MyUserControl : UserControl
        {
            MyDisposableComponent myDisposableComponent;
        
            ...
        
            void SomeMethod()
            {
                myDisposableComponent = new MyDisposableComponent();
                components.Add(myDisposableComponent);
                // myDisposableComponent will be disposed automatically when the
                // IContainer components is disposed by the designer-generated
                // Dispose implementation.
            }
        
            ...
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-10-02
          • 2016-06-25
          • 1970-01-01
          • 2016-11-06
          • 1970-01-01
          • 1970-01-01
          • 2019-06-03
          相关资源
          最近更新 更多