文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>组件与控件

组件与控件

时间:2008-07-16  来源:*^cherish^*

组件可以和控件一道陈列于工具箱之中,并可被拖放到任何设计表面之上。组建可以在设计器中进行属性设置或事件处理,就如同控件一样。
            this.components = new System.ComponentModel.Container();
            this.timer1 = new System.Windows.Forms.Timer(this.components);

当一个组件被创建的时候,他和窗体上的其他组件一样被放入一个组件列表,此组件列表类似于窗体用于跟踪其他控件的Controls集合。this.components = new System.ComponentModel.Container();

组件是指实现了System。ComponentModel命名空间中的ICompoent接口的任何类
interface IComponet:IDisposable
{
   ISite Site{get;set;}
   event EventHandler Disposed;
}
interface IDisposable{
  void Dispose();
}

控件不需要这些额外的代码,因为他们已经有了一个CLosed事件,对于大多数用途而言这相当于一个等价的通知。为了让设计器知道,一个组件希望当容器被释放时得到通知,此组件可以实现一个“IContainer类型的参数”的公共构造函数:
  public MyConponent(IContainer container)
{
   container。add(this);
  InitializeComponent();
}
设计器生成代码来使用这个构造函数,通过将一个容器传递给它,从而将组件添加进容器之中。

默认的情况下,大多数vs。net生成的包含组件的类,都会在Dispose方法实现中通知容器中的每个组件:
public class MyForm:Form{
   IContainer component;

   //重写基类Component。Dispose方法
   protected override void Dispose(bool disposing)
   {
       if(disposing)
      {
           if(component!=null)
           component.Dispose();
      }
     }
      base.Dispose(disposing);
}

public class MyCon:Component
{
   Timer timer;
   IContainer component;
   void InitializeComponent(){
    this.components=new Container();
    this.timer1=new Timer(this.component);
   }

    protected override void Dispose(bool disposing)
   {
     if(disposing){
     //释放托管资源
    。。。。
    if(components!=null)
     {
      components.Dispose();
     }
    }
    //释放非托管资源
    。。。。
   }

}

参数为true,意味着Dispose被一个“记得正确地释放组件”的客户程序所调用。
false意味着客户程序忽略对象的释放,.net垃圾回收器(GC)将调用我们对象的终结器(finalizer)。GC将在一个不确定的时间调用终结器,虽然终结器不是一个回收资源的好地方,反它总比根本不回收资源好得多。

基类Component的终结器实现调用Dispose方法,传第一个false值,表明组件不应该去碰它所容纳的任何托管对象。

任何包含其他“实现IDispose接口或者处理非托管资源”的对象的组件,都应该实现Dispose方法,以便当组件自身被容器释放时正确地释放所包含的对象的资源。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载