请教:TreeView的发生Expanding时(用鼠标展开),怎么才能不触发click事件? 请教:TreeView的发生Expanding时(用鼠标展开),怎么才能不触发click事件?谢谢关注。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 呵呵,在OnExpanding事件中写MyClick := Treeview1.OnClick;TreeView1.OnClick := nil;在OnExpanded中写TreeView1.OnClick := MyClick呵呵,不知道对不对。 在Delphi5里,好像只要你Assigned(OnExpanding)=True的话,在TreeView发生Expanding时候,也没有触发Onclick事件啊!OnCollapsing事件也是一样,楼主可以试一下 个人观点:应在OnClick中检查是否展开True:TreeView1.OnClick := nil;exit;False:执行你的OnClick下部分 先看看这几个时间触发的先后顺序,Expanding,click如果Expanding先者在Expanding 中第一行写写Onclick := nil,最后写Onclick := click如果还是不行,就想一想消息吧, 建议看看VCL源代码,看看它几个事件是怎么触发的。只要知道它是怎么触发了,你想怎么做都行。 这个问题有意思:procedure TForm1.TreeView1Click(Sender: TObject);beginedit1.text:='OnClick';end;procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TTreeNode; var AllowExpansion: Boolean);beginedit1.text:='Expand';//treeview1.OnClick:=nil;end;问题关键在:1.如果按treeview前面的+号展开的话就先执行expand后执行onclick。2.如果双击展开的话就先执行后onclick执行expand。这样上面的楼台方法都有BUG,大家一齐讨论下。 再加上如果://treeview1.OnClick:=nil;执行的话,就在展开后屏闭掉了之后所有的OnClick事件。 chechy(简简单单的活) 的 赋空值 已解决,方法如下:添加一个全局变量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; 原理好像和Click置nil差不多。 愚人之见:较于1.如果按treeview前面的+号展开的话就先执行expand后执行onclick。2.如果双击展开的话就先执行后onclick执行expand。之个人见解后,比较好的就是如何将expand和onclick触发的消息截下来再进一步作出选择,我打开VCL看了一下,居然找不到如何定义,气死我了,对VCL的封装我一点都看不懂啊!借这个问题顺便请教前辈们:查看一个类的VCL等是不是按Ctrl后点击要看的类例如treeview1这样在ComCtrls中看,请各位指点下,我刚接解delphi两三个月。 怎么判断字符串中的字符是占用一个字节还是两个字节呢? 程序运行时出错 fastreport 4.0 预览问题? 请问如何用InstallShield.for.Delphi来打包? quickrep预览双击打印按钮出现很异常的报错,请问怎么解决?送100分 如何将Dbmemo植入Dbgrid中 控制mouse!!!!!好簡單的。。。可我就是不會。 DELPHI问题N个高手指教! 变量永不使用????? 线程能向函数一样传递参数吗?怎么传?多谢 关于ShowModal窗口的一点疑问??在线等待! 请问怎么使程序跳到最前台?
MyClick := Treeview1.OnClick;
TreeView1.OnClick := nil;
在OnExpanded中写
TreeView1.OnClick := MyClick
呵呵,不知道对不对。
应在OnClick中检查是否展开
True:TreeView1.OnClick := nil;exit;
False:执行你的OnClick下部分
Expanding,click
如果Expanding先者在Expanding 中第一行写写Onclick := nil,最后写Onclick := click
如果还是不行,就想一想消息吧,
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,大家一齐讨论下。
如果:
//treeview1.OnClick:=nil;
执行的话,就在展开后屏闭掉了之后所有的OnClick事件。
添加一个全局变量
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;
较于
1.如果按treeview前面的+号展开的话就先执行expand后执行onclick。
2.如果双击展开的话就先执行后onclick执行expand。
之个人见解后,比较好的就是如何将expand和onclick触发的消息截下来再进一步作出选择,我打开VCL看了一下,居然找不到如何定义,气死我了,对VCL的封装我一点都看不懂啊!借这个问题顺便请教前辈们:
查看一个类的VCL等是不是按Ctrl后点击要看的类例如treeview1这样在ComCtrls中看,请各位指点下,我刚接解delphi两三个月。