請答答我好嗎...?謝謝

解决方案 »

  1.   

    Sender表示当前操作的那个对象。在Button1OnClick事件中,就是Button1,这是一种多态的表现
      

  2.   

    Sender 指触发事件处理程序的对象 ,TForm1.Button1Click(Sender : TObject) , 中,Sender 为 Button1 . 
      

  3.   

    Delphi中用Sender参数实现代码重用面向对象的编程工具的特点之一就是要提高代码重用性(Reuse),作为新一代可视化开发工具,Delphi中的代码重用性相当高。我们知道,在Delphi中,大部分程序代码都直接或间接地对应着一个事件,此程序称为事件处理句柄,它实际上就是一个过程。从应用程序的工程到表单、构件和程序,Delphi强调的是其开发过程中每一层次的重用性,可以通过编写某些构件常用的事件处理句柄来达到程序重用目的。你可以在属性窗口的Events页上将A事件的处理句柄指向B事件的处理句柄,这样A事件和B事件就共享了一个过程段,从而达到了重用的目的。如果共享的程序段与发生该事件的控件无关,如ShowMessage(′hello,world′),那这种共享是最简单的。但一般来说,代码段间的共享都跟发生该事件的控件有关,需要根据控件类型做出相应的处理,这时就要用到Sender参数。
      每个过程段的开头都类似procedure TForm1FormClick(Sender:TObject);其中的Sender是一个TObject类型的参数,它告诉Delphi哪个控件接收这个事件并调用相应的处理过程。你可以编写一个单一的事件处理句柄,通过Sender参数和IF…THEN…语句或者CASE语句配合,来处理多个构件。发生事件的构件或控件的值已经赋给了Sender参数,该参数的用途之一就在于:可以使用保留字IS来测试Sender,以便找到调用这个事件处理句柄的构件或控件的类型。例如,将表单中编辑框和标签的Click事件的处理句柄都指向表单的xxx过程,编辑框和标签对Click事件有不同的反应:
      procedure TForm1xxx(Sender:TObject);
      begin
      if(sender if Tedit) then
      showmessage(′this is a editbox′);
      if(sender is Tlabel) then
      showmessage(′this is a label′);
      end;
      Sender参数的第二个用途是结合AS操作符进行类型转换,将若干个派生于某一父类的子类强制转换成该父类。例如表单中有一个TEdit类控件和一个TMemo控件,它们实际上都派生于TcustomEdit类,如果你要为二者的某一事件提供同样处理,可以将二者事件句柄都指向自定义的过程yyy:
      Procedure TForm1.yyy(Sender:TObject);
      begin
      (sender as TcustomEdit).text:=′This is some demo text′;
      end;
      在过程中,AS操作符将TEdit类和TMemo类均强制转换成TcustomEdit类,再对TcustomEdit类的属性赋值。注意这种转换必须符合Delphi中类的层次关系。
      使用Sender参数可以通过单一过程段处理多类控件,真正体现了Delphi面向对象的重用性。
      

  4.   

    謝謝~~!!我想多看幾次...請壇主不要暫時不要刪除這個貼子...還有一個問題,為甚麼我在論壇的delphi-->基礎類上找不到這個貼子,要我的問題才能看見呢???thx