请教:想获取继承(或重载)自定义VCL控件中一个TreeView指针的OnChange
本人写了一个VCL,其中有:
type
XXXX = class
private
FTreeView : TTreeView ; //(只是指向外部TreeView实例)
//......
public
OnChange : FxxxEvent ....;
published
TreeView : TTreeView Read FTreeView Write FTreeView ;
//......
end;
我想在FTreeView在change的时候,先在内部执行一些代码,然后再激发外部TreeView的OnChange事件(因为可能里面有代码)应该如何做?
谢谢高手指点。
问题点数:0、回复次数:6Top
1 楼huojiehai(海天子)回复于 2003-10-03 23:19:49 得分 0
你组件应该从TTreeView中继承过来,否则不好做Top
2 楼Tivn(尘世雪)回复于 2003-10-05 17:21:45 得分 0
这个问题我已经解决:(方法如下)
type
XXXX = class
private
FTreeView : TTreeView ; //(只是指向外部TreeView实例)
FOnChange: TTVChangedEvent;
tmpOnChange: TTVChangedEvent;
procedure SetTreeView(const Value: TTreeView);
procedure DoOnChange(Sender : TObject ; Node : TTreeNode);
//......
published
property TreeView : TTreeView read FTreeView write SetTreeView;
property OnChange: TTVChangedEvent read FOnChange write FOnChange;
//......
end;
procedure XXXX.SetTreeView(const Value: TTreeView);
begin
if Value = nil then
FTreeView.OnChange:=tmpOnChange;
FTreeView := Value;
if assigned(FTreeView) then
begin
tmpOnChange:=FTreeView.OnChange;
FTreeView.OnChange:=DoOnChange;
end;
end;
procedure XXXX.DoOnChange(Sender: TObject; Node: TTreeNode);
begin
if Assigned(FOnChange) then FOnChange(Sender,Node);
if Assigned(tmpOnChange) then tmpOnChange(Sender,Node);
end;
Top
3 楼FrameSniper(http://naoku.net/blogs/framesniper/)回复于 2003-10-05 22:31:08 得分 0
偶是来学习的,呵呵!Top
4 楼huojiehai(海天子)回复于 2003-10-05 22:34:27 得分 0
这样写后,和再在树中的onchange事件中写代码有冲突吗?Top
5 楼fenglaile(风清飘)回复于 2003-10-07 09:01:38 得分 0
学习的好机会,努力学习Top
6 楼Tivn(尘世雪)回复于 2003-10-07 16:48:26 得分 0
procedure XXXX.DoOnChange(Sender: TObject; Node: TTreeNode);
begin
if Assigned(FOnChange) then FOnChange(Sender,Node);
if Assigned(tmpOnChange) then tmpOnChange(Sender,Node);
end;
这句代码首先执行的是你在自定义VCL控件中的代码,所以只要你在这个环节里不删除当前TreeNode或改变树型结构,应该是不会有冲突的吧。Top




