乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 91|回复: 15

[编程交流] 选择所有inDCL列表框p

[复制链接]

48

主题

657

帖子

33

银币

限制会员

铜币
-1
发表于 2022-7-5 16:30:29 | 显示全部楼层 |阅读模式
下午好,如果我错过了一些简单的事情,请道歉。
 
 
我在DCL对话框中有一个列表框,我想创建一个按钮来选择列表中的所有项目。我找到了一个解决方案,它突出显示了所有列表,但如果有意义的话,它似乎不会选择它们。只是想知道我哪里出错了。
 
 
由于我从其他来源复制了这篇文章的一部分,在我完成这篇文章之前还没有完全归功于它们,如果可以的话,我只想在下面发布相关部分?
 
 
 
 
 
 
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;Part of DCL File:
  3.                "  : row { "
  4.                "      : list_box { label = "Select Tag(s)"; key = "tags"; multiple_select = true; }" ;;List box populated elsewhere
  5.                "        }"
  6.                "  : row { "
  7.                "        : button { key = "ButSEL"; label = "Select All Tags"; }" ;;Select All Button
  8.                "        }"
  9. ;;.......
  10.        (action_tile "tags" "(setq tagreturn $value)")
  11.        (action_tile "ButSEL" "(c:SEL_ALL)") ;;When button ButSEL pressed run routine SEL_ALL below.
  12. ;;.......
  13.        (setq tagreturn  ;;create tag list into tagreturn (I think)
  14.          (if (= 1 (start_dialog))
  15.            (mapcar '(lambda ( x ) (nth x l)) (read (strcat "(" tagreturn ")")))
  16.          )
  17.        )
  18.    tagreturn
  19. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  20. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  21. ;;This Select all routine doesn't quite work. it highlights the list items but doesn't select them
  22. (defun c:SEL_ALL ()
  23. ;;(set_tile "tags" "0 1 2 3 4 5 6") ;;simple only highlights the items, not selects them
  24. (setq acount 0)     ;;Use a loop
  25. (repeat 50       ;;How to count the length of the list and use here?
  26.    (set_tile "tags" (itoa acount))  ;;Again only highlights the items and not selects them
  27.    (setq account (acount + 1))
  28. )
  29. )

 
 
 
 
 
 
 
 
(我曾尝试将上述内容包装在代码标签中,但它不想对我起作用,有什么想法吗?为什么不?)
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 16:38:26 | 显示全部楼层
你好
 
在你看来,突出显示和选择项目之间有什么区别?
回复

使用道具 举报

48

主题

657

帖子

33

银币

限制会员

铜币
-1
发表于 2022-7-5 16:42:22 | 显示全部楼层
嗨,塔瓦,
 
 
谢谢你看了这么远。
是的,我不太清楚。
 
 
“高亮显示”-当我按下“全选”按钮时,列表框中的项目都高亮显示,就好像它们已经被选中一样,但当我按下DCL框上的“OK”时,没有任何信息传递到例程的下一部分-就好像这些项目只高亮显示但没有被选中一样
 
 
“选定”-假设我使用键盘或鼠标选择并高亮显示列表框中的项目,然后按“确定”将选定的项目传递到例程的下一部分。使用鼠标/键盘抓取项目供以后使用
 
 
希望这有意义?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 16:45:17 | 显示全部楼层
你好
 
您向列表提供的项目列表必须分配给一个变量,因此假设变量的名称为“lst”
仅供参考当您在激活多选项的列表上使用get\u tile,并且用户高亮显示/选择了多个项目时,它将返回例如:“0 1”
因此,我们需要将这个字符串包装在一个列表中,以便能够从变量“lst”中检索相同的相关项目编号,该变量将项目添加到列表中。
 
下面只是一个示例,让您了解如何从列表属性中检索值。
  1. (action_tile "oki" "(if (setq rtn (get_tile "tags")) (mapcar '(lambda (x) (setq l (cons (nth x lst) l))) (read (strcat "(" rtn ")")))) (done_dialog)")

 
最后,变量“l”应该包含列表“tags”中的选定项,您需要使用反向函数按变量“lst”中的顺序获取这些项
 
希望这不是太多。所以只要问问你是否坚持了什么。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 16:49:30 | 显示全部楼层
更多细节和示例:
 
Dcl:
  1. "test : dialog { label = "Tag list"; fixed_width = true;
  2.           : list_box { key = "tags"; height = 16; multiple_select = true;}
  3.           : button { label = "select all"; key = "ButSEL";}
  4.           : button { label = "Okay"; key = "oki"; is_default = true;}
  5.           : button { label = "Exit"; key = "esc"; is_cancel = true;}}"

 
节目的最后一部分:
  1. (defun highlight (len / i)
  2.       (setq i -1)
  3.       (repeat len
  4.         (set_tile "tags" (itoa (setq i (1+ i))))
  5.         )
  6.       )
  7.     (setq lst '("A" "B" "C" "D"))
  8.     (start_list "tags") (mapcar 'add_list lst) (end_list)
  9.     (action_tile "ButSEL" "(highlight (length lst))")
  10.     (action_tile "oki" "(if (setq rtn (get_tile "tags")) (mapcar '(lambda (x) (setq l (cons (nth x lst) l))) (read (strcat "(" rtn ")")))) (done_dialog)")
  11.     (action_tile "esc" "(done_dialog)")

 
因此,变量“l”应该具有带有键“tags”的列表的返回值,您需要使用以下代码按照“lst”变量中的定义对列表重新排序:
 
  1. (reverse l)
回复

使用道具 举报

4

主题

2143

帖子

2197

银币

限制会员

铜币
-24
发表于 2022-7-5 16:53:27 | 显示全部楼层
请阅读代码发布指南,并编辑代码以包含在代码标签中。[NOPARSE]
  1. Your Code Here[/NOPARSE]
=
  1. Your Code Here
回复

使用道具 举报

48

主题

657

帖子

33

银币

限制会员

铜币
-1
发表于 2022-7-5 16:55:48 | 显示全部楼层
感谢SLW210-添加了代码标签。
 
 
 
 
Tharwat,我能看到它应该如何工作。。。现在还不是时候,我今天会解决它,试着找出我做错了什么
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 17:00:14 | 显示全部楼层
 
让我知道你进展如何。
 
祝你好运
回复

使用道具 举报

48

主题

657

帖子

33

银币

限制会员

铜币
-1
发表于 2022-7-5 17:05:28 | 显示全部楼层
你好
 
 
只是一个快速更新-我无法在周五完成这项工作,距离现在还很近(我有一些怀疑我需要看什么),但现在我面前有一堆图纸。我现在将把它放在一边,稍后再处理
回复

使用道具 举报

48

主题

657

帖子

33

银币

限制会员

铜币
-1
发表于 2022-7-5 17:09:49 | 显示全部楼层
嗨,塔瓦特,我正在赶上一切。我做得很好,虽然有点混乱,但我想我在这过程中学到了一些东西,谢谢
 
 
最后,我无法让您的方法正常工作(我想我知道为什么,可能是我在某个地方混淆了变量名)
 
 
为了使其工作,我将最后一个函数SEL_ALL更改为:
 
 
  1. (defun c:SEL_ALL (len) ;;len = length of tags list
  2. (setq tagreturn "") ;;tagreturn = positions in drop list of selected items
  3. (setq acount 0) ;;acount = a counter
  4. (repeat len
  5.    (set_tile "tags" (itoa acount))
  6.    (setq tagreturn (strcat (strcat tagreturn (itoa acount)) " "))
  7.    (setq acount (1+ acount))
  8. )
  9. )

 
 
 
 
再次感谢
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-7 10:00 , Processed in 1.966072 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表