一个控件,引发一个事件,只能使用一个事件处理程序吗??例如:有一个Button1 程序A:Button1.OnClick:=xxx;
程序B:Button1.OnClick:=yyy;这样,OnClick事件只能运行yyy,而不能运行xxx.而在C#中.程序A: Button1.OnClick+=xxx;
程序B: Button1.OnClick+=yyy;
这样,OnClick事件发生时,先运行完xxx,再运行yyy.现在做控件时,发现大量这种问题,A控件引用B控件时,可能会处理B控件的某个事件,但在处理这个事件之前,B控件某事件已经有处理程序了.而且,在程序运行途中,B控件原来的事件很有可能又赋为nil或有其它改变,但又不能影响到A控件处理B控件某事件的处理程序.所以很需要类似.net的消息列表.
请教一下大虾们,应该如何办?

解决方案 »

  1.   

    变通一下:
    设一变量funcstat:integer,procedure TForm1.Button1Click(Sender: TObject);
    begin
      case funcstat of
      0:exit;  //什么都不做
      1:xxx;   //执行xxx;
      2:yyy;   //执行yyy;
      3:
      begin
       xxx;    //先执行xxx;
       yyy;    //再执行yyy;
      end;
      4:
      begin
        yyy;   //先执行yyy;
        xxx;   //再先执行xxx;
      end;
    end;这样在程序A中,只要设funcstat:=1;
    在在程序B中,只要设funcstat:=3;
    就应该能满足你的要求
      

  2.   

    楼主怎么不用ACCESS写一个事件触发代码呢?
      

  3.   

    to:ghyghost(爱国人士) 
    我刚从ACCESS的中走出来,怎会再进入ACCESS中呢?
    to:keiy() 
    不行的,xxx和yyy只是特例,很可能会有aaa,bbb,ccc,ddd,eee,fff,ggg....更复杂更复杂的情况.
      

  4.   

    例如:有一个Button1 程序A:Button1.OnClick:=xxx;
    程序B:Button1.OnClick:=yyy;这样,OnClick事件只能运行yyy,而不能运行xxx.而在C#中.程序A: Button1.OnClick+=xxx;
    程序B: Button1.OnClick+=yyy;
    这样,OnClick事件发生时,先运行完xxx,再运行yyy.DELPHI好像不行。。
      

  5.   

    C#中的事件处理模型是
    对象A产生事件E (调用)-》事件E的委托 (调用)——》【事件E的委托1、事件E的委托2..】委托是封装了一系列方法引用的特殊类,而DELPHI中好像没有提供这种机制。在DELPHI中,你只能变通的去做。做一个类,类中有的N个方法分别完成不同的功能,然后有一个数组,也就是这些方法的索引列表,然后根据这个索引列表来完成相应的操作。
      

  6.   

    晕,看来要好好解决这个问题,只有改写VCL了.
      

  7.   

    其实个人认为C#在某种意义上就是改写过后的DELPHI。。如果它完全和DELPHI一样,就没必要做C#了。
      

  8.   

    C#中的事件处理模型是
    对象A产生事件E (调用)-》事件E的委托 (调用)——》【事件E的委托1、事件E的委托2..】
    ////////////////
    说到这个,好像可以使用接口来实现委托
      

  9.   

    可以变通达到这个目的的
    比如有a,b两个类,a类中要调用b中的方法可以在b中生成一个a的实例进行调用的
      

  10.   

    楼主的问题好像矛盾了吧
    1:(只有Button1一个控件,两方法 )程序A:Button1.OnClick:=xxx;
    程序B:Button1.OnClick:=yyy;这样,OnClick事件只能运行yyy,而不能运行xxx.2。(A控件,B控件,两控件)现在做控件时,发现大量这种问题,A控件引用B控件时,可能会处理B控件的某个事件,但在处理这个事件之前,B控件某事件已经有处理程序了.而且,在程序运行途中,B控件原来的事件很有可能又赋为nil或有其它改变,但又不能影响到A控件处理B控件某事件的处理程序.不明白???
      

  11.   

    你的A和B应该都是一个PROJECT中的CLASS吧。
    写一个底层的CLASS BASIC,A和B都继承CLASS BASIC,然后分别写A和B的ONCLICK事件,这样对于A和B两个不同实例应该可以实现不同的ONCLICK事件。