qyming 发表于 2014-6-25 19:15:38

继续下去。。。。。。。。。。

自贡黄明儒 发表于 2014-6-25 20:26:26

77077 发表于 2014-6-25 17:37
为什么不能改列表项了呢?"+"变成"-"之后,再点击不会变"+"了~~~

估计得重加载列表内容

ZZXXQQ 发表于 2014-6-26 08:20:21

;重组数据表(defun key1 ()
(setq n (atoi(get_tile "key1"))
      i 0
      nlist (list))
(repeat (length llist)
(setq str (nth i llist))
(setq nlist
(cons
   (if (= i n)
    (strcat (if (= (substr str 1 1) "-") "+" "-") (substr str 2))
    str
   )
   nlist
)
)
(setq i (1+ i))
)
(start_list "key1")
(mapcar 'add_list (setq llist (reverse nlist)))
(end_list)
)

77077 发表于 2014-6-26 10:28:32

断断续续,编写过程中,做个笔记先...;key1动作反应
(defun key1 (/ n a a1 lstn)
(setq n (atoi (get_tile "key1"));取得当前选中项的索引值n
      a (nth n boxlst);从列表框中取出第n个表项:"+D分类四"
   a1 (substr a 2);分割(substr "+D分类四" 2)=>"D分类四"
      )
(setq lstn (vl-remove-if '(lambda (x) (/= (strlen (car x)) 2)) lst));取出所有中类组成lstn,即字符长度为2的项目
(setq lstn (vl-remove-if '(lambda (x) (/= (substr (car x) 1 1) (substr a1 1 1))) lstn));取出对应的中类,即首字为D的项目
(setq lstn (mapcar '(lambda(x) (strcat "++" (car x) (cadr x))) lstn));组成准备插入列表框的表lstn
;如果"a"以+开头:
;插入lstn到原表并刷新显示.
;否则删除列表后刷新显示.
(if (= (substr a 1 1) "+")
   (progn
      (setq boxlst (LI_DelLst boxlst n)
;             boxlst (LI_AddList boxlst n lstn)
             boxlst (LI_AddList boxlst n (strcat "-" a1))
             )
      (fill_list_box "key1" boxlst)
    )
       (progn
      (setq boxlst (LI_DelLst boxlst n)
;删除表项
             boxlst (LI_AddList boxlst n (strcat "+" a1))
             )
      (fill_list_box "key1" boxlst)
    )
)
)

77077 发表于 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分类四")

77077 发表于 2014-6-26 11:37:25

(defun append-lstn (lst1 n lst2 / tmplst1 tmplst2 m)
(setq tmplst1 '()
      tmplst2 '()
      m 0
   )
(repeat n
(setqtmplst1 (cons (nth m lst1) tmplst1)
      m (1+ m)
      )
    );取出前N项
(repeat (- (length lst1) n)
(setqtmplst2 (cons (nth m lst1) tmplst2)
      m (1+ m)
      )
    );取出m项之后部分
(append (reverse tmplst1) lst2 (reverse tmplst2))
)(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")


edata 发表于 2014-6-26 12:26:40

个人觉得构建这样的表。
(("++aaa" ("+aa"("a" "b" "c")) ("+bb"("a" "b" "c")))("++bbb" ("+aa"("a" "b" "c")) ("+bb"("a" "b" "c"))))
默认载入表首位值。
如果点击某一个++,则执行改首位为-+展开子表首位值。如果点击+则完全展开该+下的子表

77077 发表于 2014-6-26 12:50:04

本帖最后由 77077 于 2014-6-26 13:00 编辑

edata 发表于 2014-6-26 12:26 static/image/common/back.gif
个人觉得构建这样的表。
(("++aaa" ("+aa"("a" "b" "c")) ("+bb"("a" "b" "c")))("++bbb" ("+aa"("a" "b"...
e版,这个厉害哦~
我初学者,没技巧,求收徒~

77077 发表于 2014-6-26 13:02:57

目前完成到中分类...继续~~~



77077 发表于 2014-6-26 13:04:50

为了避免忘记,做个笔记(defun key1 (/ n a a1 lstn)
(setq n (atoi (get_tile "key1"));取得当前选中项的索引值n
      a (nth n boxlst);从列表框中取出第n个表项:"+D分类四"
   a1 (substr a 2);分割(substr "+D分类四" 2)=>"D分类四"
      )
(setq lstn (vl-remove-if '(lambda (x) (/= (strlen (car x)) 2)) lst));取出所有中类组成lstn,即字符长度为2的项目
(setq lstn (vl-remove-if '(lambda (x) (/= (substr (car x) 1 1) (substr a1 1 1))) lstn));取出对应的中类,即首字为D的项目
(setq lstn (mapcar '(lambda(x) (strcat "+" (car x) (cadr x))) lstn));组成准备插入列表框的表lstn
;如果"a"以+开头:
;插入lstn到原表并刷新显示.
;否则删除列表后刷新显示.
(if (= (substr a 1 1) "+")
   (progn
      (setq boxlst (LI-DelLst boxlst n)
             boxlst (LI-append-lstn boxlst n lstn)
             boxlst (LI-append-lstn boxlst n (list (strcat "-" a1)))
             )
      (fill-list-box "key1" boxlst)
      (set_tile "key1" (itoa n))
       );progn
       (progn
       (repeat (1+(length lstn))
         (setq boxlst (LI-DelLst boxlst n));删除表项
         )
      (setq boxlst (LI-append-lstn boxlst n (list (strcat "+" a1))))
      (fill-list-box "key1" boxlst)
      (set_tile "key1" (itoa n))
       );progn
);if
)
页: 1 [2] 3
查看完整版本: 飞诗请进,求关于list_box单击打开收拢的效果代码~