谢谢各位大哥的指点,问题是这样的:
    我用了一个TRzGroup,其中其中有一个open事件,想在open事件中设置TRzGroup1的属性opened为true,但是这个事件被多个这样的操作调用,所以不能直接设置TRzGroup1.Opened为true;于是想到用sender,sender在传递事系统定义为TObject,不能直接使用,再想到了强制类转换,菜鸟我不知道用哪个函数可以转换。
    请各位高手帮我解析一下我的思路对不对,恳请给予帮助。如果代码说明更好,谢谢!

解决方案 »

  1.   

    (sender as TRzGroup).Opened:=True;
      

  2.   

    TRzGroup(sender).Opened := True;
      

  3.   

    TRzGroup(Sender).Opend := True;
    Sender是指事件的调用者,也就是发出事件的组件。
    self是类的指针,指向自己。
      

  4.   

    给些资料你参考: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 is 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面向对象的重用性。
      

  5.   

    你说的是不是Raize控件,我没有找到TRzGroup,没法帮你。不过类型转换,可以用TSomeObject(Sender) 或 Sender as TSomeObject来转换。
      

  6.   

    (sender as TRzGroup)和TRzGroup(sender)两者方式虽然都可以,但是不要采用第二种方式。as转换时会进行判断是否可以进行向下转换,如果这个Sender不是对应类型会抛出运行时异常。而采用第二种方法,是直接把这段地址认为是一个TRzGroup,如果传入的不匹配,可能发生不可知的结果。
      

  7.   

    is Sender Is 你的类 then 
    Sender As 你的类
      

  8.   

    谢谢各位大哥
    现在就给分,当然,主要是感谢,分不重要
    to iHappy52:是用的Raize控件