请教:TreeView的发生Expanding时(用鼠标展开),怎么才能不触发click事件?

票票飞扬 2003-07-26 12:26:53
请教:TreeView的发生Expanding时(用鼠标展开),怎么才能不触发click事件?
谢谢关注。
...全文
112 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
chechy 2003-07-26
  • 打赏
  • 举报
回复
呵呵,在OnExpanding事件中写
MyClick := Treeview1.OnClick;
TreeView1.OnClick := nil;
在OnExpanded中写
TreeView1.OnClick := MyClick
呵呵,不知道对不对。
span_space 2003-07-26
  • 打赏
  • 举报
回复
learn
jacket008 2003-07-26
  • 打赏
  • 举报
回复
我怎么不会想到????
jacket008 2003-07-26
  • 打赏
  • 举报
回复
愚人之见:
较于
1.如果按treeview前面的+号展开的话就先执行expand后执行onclick。
2.如果双击展开的话就先执行后onclick执行expand。
之个人见解后,比较好的就是如何将expand和onclick触发的消息截下来再进一步作出选择,我打开VCL看了一下,居然找不到如何定义,气死我了,对VCL的封装我一点都看不懂啊!借这个问题顺便请教前辈们:
查看一个类的VCL等是不是按Ctrl后点击要看的类例如treeview1这样在ComCtrls中看,请各位指点下,我刚接解delphi两三个月。
chechy 2003-07-26
  • 打赏
  • 举报
回复
原理好像和Click置nil差不多。
票票飞扬 2003-07-26
  • 打赏
  • 举报
回复
已解决,方法如下:
添加一个全局变量
var bExpanded : Boolean;
procedure TFormMain.TreeView1Expanding(Sender: TObject;
Node: TTreeNode; var AllowExpansion: Boolean);
begin
bExpanded := True;
..................
end;

procedure TFormMain.TreeView1Collapsing(Sender: TObject;
Node: TTreeNode; var AllowCollapse: Boolean);
begin
bExpanded := True;
....................
end;


procedure TFormSelectAddress.TreeView1Click(Sender: TObject);
begin
if (bExpanded) then
begin
bExpanded := false;
Exit;
end;
.....................
end;
lalalulu 2003-07-26
  • 打赏
  • 举报
回复
学习
duxin 2003-07-26
  • 打赏
  • 举报
回复
chechy(简简单单的活) 的 赋空值
深宇 2003-07-26
  • 打赏
  • 举报
回复
在OnExpanding里
abort;
jacket008 2003-07-26
  • 打赏
  • 举报
回复
再加上
如果:
//treeview1.OnClick:=nil;
执行的话,就在展开后屏闭掉了之后所有的OnClick事件。

jacket008 2003-07-26
  • 打赏
  • 举报
回复
这个问题有意思:
procedure TForm1.TreeView1Click(Sender: TObject);
begin
edit1.text:='OnClick';
end;

procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
begin
edit1.text:='Expand';
//treeview1.OnClick:=nil;
end;

问题关键在:
1.如果按treeview前面的+号展开的话就先执行expand后执行onclick。
2.如果双击展开的话就先执行后onclick执行expand。

这样上面的楼台方法都有BUG,大家一齐讨论下。
kuangning 2003-07-26
  • 打赏
  • 举报
回复
建议看看VCL源代码,看看它几个事件是怎么触发的。只要知道它是怎么触发了,你想怎么做都行。
kuangning 2003-07-26
  • 打赏
  • 举报
回复
先看看这几个时间触发的先后顺序,
Expanding,click
如果Expanding先者在Expanding 中第一行写写Onclick := nil,最后写Onclick := click
如果还是不行,就想一想消息吧,
jacket008 2003-07-26
  • 打赏
  • 举报
回复
个人观点:
应在OnClick中检查是否展开
True:TreeView1.OnClick := nil;exit;
False:执行你的OnClick下部分
xybh97102 2003-07-26
  • 打赏
  • 举报
回复
在Delphi5里,好像只要你Assigned(OnExpanding)=True的话,在TreeView发生Expanding时候,也没有触发Onclick事件啊!OnCollapsing事件也是一样,楼主可以试一下

5,939

社区成员

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

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