我用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}; };
关键是要理解event, property
void FireAgeChanged() { if (FOnAgeChange) FOnAgeChange(this); } 这段是干吗用的?
procedure TForm1.SetfsMain(const Value: frameState); var OldValue:frameState; begin OldValue:=FfsMain; FfsMain := Value; if OldValue<>FfsMain then ShowMessage('Change'); end;是不是可以这样写啊?
我直接在写新值的时候判断是否发生了改变,然后执行我原来定义好的代码正解!设个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;
怎么搞呢?
给点思路,直接在Frame的子类中写不可以吗?
{
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};
};
{
if (FOnAgeChange)
FOnAgeChange(this);
}
这段是干吗用的?
var
OldValue:frameState;
begin
OldValue:=FfsMain;
FfsMain := Value;
if OldValue<>FfsMain then
ShowMessage('Change');
end;是不是可以这样写啊?
var
OldValue:frameState;
begin
//OldValue:=FfsMain; 这个OldValue有点多余
//FfsMain := Value;
if Value<>FfsMain then
begin
FfsMain := Value;
ShowMessage('Change');
//做你Change该做的事
end;
end;
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事件一样
比如象Edit的OnChange事件那样,我可以在外面写代码
hehe:Company;
...hehe.NameOnChange = Form1.OnNameChange;