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

解决方案 »

  1.   

    呵呵,在OnExpanding事件中写
    MyClick := Treeview1.OnClick;
    TreeView1.OnClick := nil;
    在OnExpanded中写
    TreeView1.OnClick := MyClick
    呵呵,不知道对不对。
      

  2.   

    在Delphi5里,好像只要你Assigned(OnExpanding)=True的话,在TreeView发生Expanding时候,也没有触发Onclick事件啊!OnCollapsing事件也是一样,楼主可以试一下
      

  3.   

    个人观点:
    应在OnClick中检查是否展开
    True:TreeView1.OnClick := nil;exit;
    False:执行你的OnClick下部分
      

  4.   

    先看看这几个时间触发的先后顺序,
    Expanding,click
    如果Expanding先者在Expanding 中第一行写写Onclick := nil,最后写Onclick := click
    如果还是不行,就想一想消息吧,
      

  5.   

    建议看看VCL源代码,看看它几个事件是怎么触发的。只要知道它是怎么触发了,你想怎么做都行。
      

  6.   

    这个问题有意思:
    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,大家一齐讨论下。
      

  7.   

    再加上
    如果:
    //treeview1.OnClick:=nil;
    执行的话,就在展开后屏闭掉了之后所有的OnClick事件。
      

  8.   

    chechy(简简单单的活)  的    赋空值
      

  9.   

    已解决,方法如下:
    添加一个全局变量
    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;
      

  10.   

    原理好像和Click置nil差不多。
      

  11.   

    愚人之见:
    较于
    1.如果按treeview前面的+号展开的话就先执行expand后执行onclick。
    2.如果双击展开的话就先执行后onclick执行expand。
    之个人见解后,比较好的就是如何将expand和onclick触发的消息截下来再进一步作出选择,我打开VCL看了一下,居然找不到如何定义,气死我了,对VCL的封装我一点都看不懂啊!借这个问题顺便请教前辈们:
    查看一个类的VCL等是不是按Ctrl后点击要看的类例如treeview1这样在ComCtrls中看,请各位指点下,我刚接解delphi两三个月。