请教:想获取继承(或重载)自定义VCL控件中一个TreeView指针的OnChange

Naiteux 2003-10-03 11:12:50
本人写了一个VCL,其中有:
type
XXXX = class
private
FTreeView : TTreeView ; //(只是指向外部TreeView实例)
//......
public
OnChange : FxxxEvent ....;
published
TreeView : TTreeView Read FTreeView Write FTreeView ;
//......
end;

我想在FTreeView在change的时候,先在内部执行一些代码,然后再激发外部TreeView的OnChange事件(因为可能里面有代码)应该如何做?
谢谢高手指点。
...全文
65 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fenglaile 2003-10-07
  • 打赏
  • 举报
回复
学习的好机会,努力学习
Naiteux 2003-10-07
  • 打赏
  • 举报
回复
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或改变树型结构,应该是不会有冲突的吧。
huojiehai 2003-10-05
  • 打赏
  • 举报
回复
这样写后,和再在树中的onchange事件中写代码有冲突吗?
FrameSniper 2003-10-05
  • 打赏
  • 举报
回复
偶是来学习的,呵呵!
Naiteux 2003-10-05
  • 打赏
  • 举报
回复
这个问题我已经解决:(方法如下)
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;

huojiehai 2003-10-03
  • 打赏
  • 举报
回复
你组件应该从TTreeView中继承过来,否则不好做

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧