明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 77077

[已解答] 飞诗请进,求关于list_box单击打开收拢的效果代码~

[复制链接]
发表于 2014-6-25 19:15:38 | 显示全部楼层
继续下去。。。。。。。。。。
发表于 2014-6-25 20:26:26 来自手机 | 显示全部楼层
77077 发表于 2014-6-25 17:37
为什么不能改列表项了呢?"+"变成"-"之后,再点击不会变"+"了~~~

估计得重加载列表内容
发表于 2014-6-26 08:20:21 | 显示全部楼层
;重组数据表
  1. (defun key1 ()
  2. (setq n (atoi(get_tile "key1"))
  3.       i 0
  4.       nlist (list))
  5. (repeat (length llist)
  6. (setq str (nth i llist))
  7. (setq nlist
  8.   (cons
  9.    (if (= i n)
  10.     (strcat (if (= (substr str 1 1) "-") "+" "-") (substr str 2))
  11.     str
  12.    )
  13.    nlist
  14.   )
  15. )
  16. (setq i (1+ i))
  17. )
  18. (start_list "key1")
  19. (mapcar 'add_list (setq llist (reverse nlist)))
  20. (end_list)
  21. )
 楼主| 发表于 2014-6-26 10:28:32 | 显示全部楼层
断断续续,编写过程中,做个笔记先...
  1. ;key1动作反应
  2. (defun key1 (/ n a a1 lstn)
  3. (setq n (atoi (get_tile "key1"));取得当前选中项的索引值n
  4.       a (nth n boxlst);从列表框中取出第n个表项:"+D分类四"
  5.      a1 (substr a 2);分割(substr "+D分类四" 2)=>"D分类四"
  6.       )
  7. (setq lstn (vl-remove-if '(lambda (x) (/= (strlen (car x)) 2)) lst));取出所有中类组成lstn,即字符长度为2的项目
  8. (setq lstn (vl-remove-if '(lambda (x) (/= (substr (car x) 1 1) (substr a1 1 1))) lstn));取出对应的中类,即首字为D的项目
  9. (setq lstn (mapcar '(lambda(x) (strcat "++" (car x) (cadr x))) lstn));组成准备插入列表框的表lstn
  10. ;如果"a"以+开头:
  11. ;插入lstn到原表并刷新显示.
  12. ;否则删除列表后刷新显示.
  13. (if (= (substr a 1 1) "+")
  14.    (progn
  15.         (setq boxlst (LI_DelLst boxlst n)
  16. ;             boxlst (LI_AddList boxlst n lstn)
  17.              boxlst (LI_AddList boxlst n (strcat "-" a1))
  18.              )
  19.         (fill_list_box "key1" boxlst)
  20.     )
  21.        (progn
  22.         (setq boxlst (LI_DelLst boxlst n)
  23. ;删除表项
  24.              boxlst (LI_AddList boxlst n (strcat "+" a1))
  25.              )
  26.         (fill_list_box "key1" boxlst)
  27.     )
  28. )
  29. )
 楼主| 发表于 2014-6-26 10:33:01 | 显示全部楼层
本帖最后由 77077 于 2014-6-26 10:43 编辑

我在尝试三层分类,目前暂时还在研究第二两层.所以中类上又加了个"++"

谁能给个函数将lst插入到lst中
("+A分类一" "+B分类二" "+C分类三" "+D分类四")
("++A1中类一" "++A2分类一" "++A3分类一" "++A4分类一")
形成:("+A分类一" "++A1中类一" "++A2分类一" "++A3分类一" "++A4分类一" "+B分类二" "+C分类三" "+D分类四")
 楼主| 发表于 2014-6-26 11:37:25 | 显示全部楼层
  1. (defun append-lstn (lst1 n lst2 / tmplst1 tmplst2 m)
  2. (setq tmplst1 '()
  3.       tmplst2 '()
  4.       m 0
  5.      )
  6. (repeat n
  7.   (setq  tmplst1 (cons (nth m lst1) tmplst1)
  8.         m (1+ m)
  9.         )
  10.     );取出前N项
  11. (repeat (- (length lst1) n)
  12.   (setq  tmplst2 (cons (nth m lst1) tmplst2)
  13.         m (1+ m)
  14.         )
  15.     );取出m项之后部分
  16. (append (reverse tmplst1) lst2 (reverse tmplst2))
  17. )
(setq lst1 '("+A" "+B" "+C" "+D" "+E" "+F" "+G")
      lst2  '("++A1" "++A2" "++A3" "++A4" "++A5" "++A6")
                        )
命令: (append-lstn lst1 2 lst2)
("+A" "+B" "++A1" "++A2" "++A3" "++A4" "++A5" "++A6" "+C" "+D" "+E" "+F" "+G")
命令: (append-lstn lst1 3 lst2)
("+A" "+B" "+C" "++A1" "++A2" "++A3" "++A4" "++A5" "++A6" "+D" "+E" "+F" "+G")
命令: (append-lstn lst1 4 lst2)
("+A" "+B" "+C" "+D" "++A1" "++A2" "++A3" "++A4" "++A5" "++A6" "+E" "+F" "+G")


发表于 2014-6-26 12:26:40 | 显示全部楼层
个人觉得构建这样的表。
(("++aaa" ("+aa"("a" "b" "c")) ("+bb"("a" "b" "c")))("++bbb" ("+aa"("a" "b" "c")) ("+bb"("a" "b" "c"))))
默认载入表首位值。
如果点击某一个++,则执行改首位为-+展开子表首位值。如果点击+则完全展开该+下的子表
 楼主| 发表于 2014-6-26 12:50:04 | 显示全部楼层
本帖最后由 77077 于 2014-6-26 13:00 编辑
edata 发表于 2014-6-26 12:26
个人觉得构建这样的表。
(("++aaa" ("+aa"("a" "b" "c")) ("+bb"("a" "b" "c")))("++bbb" ("+aa"("a" "b"  ...

e版,这个厉害哦~
我初学者,没技巧,求收徒~
 楼主| 发表于 2014-6-26 13:02:57 | 显示全部楼层
目前完成到中分类...继续~~~



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2014-6-26 13:04:50 | 显示全部楼层
为了避免忘记,做个笔记
  1. (defun key1 (/ n a a1 lstn)
  2. (setq n (atoi (get_tile "key1"));取得当前选中项的索引值n
  3.       a (nth n boxlst);从列表框中取出第n个表项:"+D分类四"
  4.      a1 (substr a 2);分割(substr "+D分类四" 2)=>"D分类四"
  5.       )
  6. (setq lstn (vl-remove-if '(lambda (x) (/= (strlen (car x)) 2)) lst));取出所有中类组成lstn,即字符长度为2的项目
  7. (setq lstn (vl-remove-if '(lambda (x) (/= (substr (car x) 1 1) (substr a1 1 1))) lstn));取出对应的中类,即首字为D的项目
  8. (setq lstn (mapcar '(lambda(x) (strcat "  +" (car x) (cadr x))) lstn));组成准备插入列表框的表lstn
  9. ;如果"a"以+开头:
  10. ;插入lstn到原表并刷新显示.
  11. ;否则删除列表后刷新显示.
  12. (if (= (substr a 1 1) "+")
  13.    (progn
  14.         (setq boxlst (LI-DelLst boxlst n)
  15.              boxlst (LI-append-lstn boxlst n lstn)
  16.              boxlst (LI-append-lstn boxlst n (list (strcat "-" a1)))
  17.              )
  18.         (fill-list-box "key1" boxlst)
  19.       (set_tile "key1" (itoa n))
  20.        );progn
  21.        (progn
  22.        (repeat (1+(length lstn))
  23.            (setq boxlst (LI-DelLst boxlst n));删除表项
  24.            )
  25.         (setq boxlst (LI-append-lstn boxlst n (list (strcat "+" a1))))
  26.         (fill-list-box "key1" boxlst)
  27.         (set_tile "key1" (itoa n))
  28.        );progn
  29. );if
  30. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-22 04:09 , Processed in 0.181407 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表