我在frame中定义了一个枚举类型的变量,当我程序修改了这个变量之后我希望自动执行一些操作,就是要给这个变量写一个OnChange事件,请问怎么搞啊?

解决方案 »

  1.   

    用类吗?
    怎么搞呢?
    给点思路,直接在Frame的子类中写不可以吗?
      

  2.   

    我用CB, 参考一下:class TMyFrame : public TFrame
    {
    private:
        int age;
        TNotifyEvent FOnAgeChange;
        int getAge()
        {
            return age;
        }
        void setAge(int val)
        {
            if (age != val)
            {
                age = val;
                FireAgeChanged();
            }
        }
        void FireAgeChanged()
        {
            if (FOnAgeChange)
                FOnAgeChange(this);
        }
    public:
        __property int Age = { read = getAge, write = setAge };
        __property TNotifyEvent OnAgeChange = { read = FOnAgeChange, write = FOnAgeChange};
    };
      

  3.   

    关键是要理解event, property
      

  4.   

    void FireAgeChanged()
        {
            if (FOnAgeChange)
                FOnAgeChange(this);
        }
    这段是干吗用的?
      

  5.   

    procedure TForm1.SetfsMain(const Value: frameState);
    var
      OldValue:frameState;
    begin
      OldValue:=FfsMain;
      FfsMain := Value;
      if OldValue<>FfsMain then
        ShowMessage('Change');
    end;是不是可以这样写啊?
      

  6.   

    我直接在写新值的时候判断是否发生了改变,然后执行我原来定义好的代码正解!设个Property.property State: TFrameState read GetFrameState write SetfsMain;procedure TForm1.SetfsMain(const Value: frameState);
    var
      OldValue:frameState;
    begin
      //OldValue:=FfsMain;  这个OldValue有点多余
      //FfsMain := Value;
      if Value<>FfsMain then
      begin
        FfsMain := Value;
        ShowMessage('Change');
        //做你Change该做的事
      end;
    end;
      

  7.   

    写一个类,类里有一个属性是对这个枚举值进行操作,然后在属性的 Write 方法中写上你需要的代码。或者是触发一个事件。
      

  8.   

    TCompany = class
      private
        FName: string;
        FCode: string;
        FNameOnChange: TNotifyEvent;
        procedure SetName(const Value: string);
        procedure SetCode(const Value: string);
        procedure SetNameOnChange(const Value: TNotifyEvent);
      public
        property Name:string read FName write SetName;
        property Code:string read FCode write SetCode;
        property NameOnChange:TNotifyEvent read FNameOnChange write SetNameOnChange;
      end;
    简答的指教一下,上面的Name,有个OnChange事件。如何调用。我在使用Company对象的时候如何写OnChange事件,象Button的OnClick事件一样
      

  9.   

    怎么搞能,说简单点,做好有和例子:
    比如象Edit的OnChange事件那样,我可以在外面写代码
      

  10.   

    var
    hehe:Company;
    ...hehe.NameOnChange = Form1.OnNameChange;