如题

解决方案 »

  1.   

    创建时加上TVS_CHECKBOXES 风格
      

  2.   

    默认的TreeView是没有这个风格的, 修改它的源码, 或重新从TCustomTreeView派生出来一个
      

  3.   

    也可以自己做:
    两种做法:
    第一种:画两个图,一个是打勾的checkbox1.bmp,一个是不打勾的checkbox2.bmp,把它们load进
    timagelist中,假设index分别为1,2.procedure TForm1.treeview2getselectedindex(Sender: TObject;
     Node: TTreeNode);
    begin
    if Node.selectedIndex=1 then{节点前若已打勾,被选中时取消打勾}
    begin
    Node.SelectedIndex:=2;
    Node.Imageindex:=2;
    end
    else
    begin
    Node.selectedIndex:=1;
    Node.Imageindex:=1;
    end;
    第二种方法,就是使用stateimage,效果不错
    但不是checkbox,而是画一个打勾的图形(indext=3),当某个item被选中后,前面就出现这个打勾的图标,
    当再次点击后,打勾的图标就消失.
    在treeview的onclick事件中添加如下代码:
    if treeview2.selected.StateIndex<>3 then
     treeview2.selected.StateIndex:=3
    else
     treeview2.selected.StateIndex:=-1;  
      

  4.   

    TO: menggirl(看天上浮云,胜似闲庭信步) 
    你的方法我现在就是用这种,但不理想。如双击如何控制不展开呢?有没好一点的控件。
      

  5.   

    CnPack 有一个你要的控件,CheckTreeView。
      

  6.   

    这里有我写的一个控件,很简单,但比较好用
    http://expert.csdn.net/Expert/topic/2961/2961287.xml?temp=.4622003
      

  7.   

    www.xmflyfish.com/awind/treechk.rar 
    我以为是比较完美的,用时判断其StateIndex值;用TVS_CHECKBOXES 显示的框太粗