乐筑天下

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

[编程交流] 第二个弹出窗口的值

[复制链接]

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 08:01:28 | 显示全部楼层 |阅读模式
你好
 
当一个对话框中有两个弹出列表时,我们想得到第二个弹出列表的值,
下面的get\u tile函数将第一个列表视为0,第二个列表的值
 
如何获取第二个弹出列表的值,因为第一个列表未激活,尽管其值为0
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 08:10:28 | 显示全部楼层
实例
DCL代码。。
  1. txt: dialog {
  2.    label = "texts";
  3.         : column {
  4.         : row {
  5.         :boxed_column {
  6.         :radio_button { key = "rad1";  label = "50-500" ; }
  7.         :radio_button { key = "rad2";  label = "500-1000" ; }
  8.         }
  9.         :boxed_column {
  10.         :row {: popup_list { key = "h1"; is_enabled = true; }}
  11.         :row {: popup_list { key = "h2"; is_enabled = false;}}
  12.         }}
  13.              : boxed_row {
  14.              : button { key = "accept"; label = " Okay "; is_default = true; }
  15.              : button { key = "cancel"; label = " Cancel "; is_default = false; is_cancel = true;}
  16.              }
  17.              }
  18.        }
  19.       

 
Lisp代码。。。
  1. (defun c:Test (/ dcl_id lst1 lst2 val1 val2 size1 size2)
  2. (setq dcl_id (load_dialog "txt.dcl"))
  3. (if (not (new_dialog "txt" dcl_id))
  4.    (exit)
  5. )
  6. (start_list "h1")
  7. (mapcar 'add_list
  8.          (setq lst1 '("50" "75" "100" "125" "150" "200" "250" "300"
  9.                       "350" "400" "450" "500"
  10.                      )
  11.          )
  12. )
  13. (end_list)
  14. (start_list "h2")
  15. (mapcar 'add_list
  16.          (setq lst2 '("550" "600" "650" "700" "750" "800" "850" "900"
  17.                       "950" "1000"
  18.                      )
  19.          )
  20. )
  21. (end_list)
  22. (set_tile "rad1" "1")
  23. (action_tile
  24.    "rad1"
  25.    "(setq val1 $value)(mode_tile "h1" (boole 1 1 0))(mode_tile "h2" (boole 1 1 (atoi val1)))"
  26. )
  27. (action_tile
  28.    "rad2"
  29.    "(setq val2 $value)(mode_tile "h2" (boole 1 1 0))(mode_tile "h1" (boole 1 1 (atoi val2)))"
  30. )
  31. (action_tile
  32.    "accept"
  33.    "(setq size1 (atoi (get_tile "h1")))(setq size2 (atoi (get_tile "h2")))(setq done t)(done_dialog)"
  34. )
  35. (action_tile "cancel" "(setq done nil)(done_dialog)")
  36. (start_dialog)
  37. (unload_dialog dcl_id)
  38. (if done
  39.    (progn
  40.      (princ (eval size1)) [color=red][b];;<= would always have a value , even if it was not chosen ( activated ) [/b][/color]
  41.      (princ (eval size2))
  42.    )
  43. )
  44. (princ)
  45. )
此外,尽量不要使动作的表达过于拥挤;使用专用功能。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:17:19 | 显示全部楼层
谢谢米尔恰。
 
我以前试过,但它总是返回一个nil值,我的意思是get\u tile函数。
  1. (defun OnOK()
  2. (if (= (get_tile "rad1") "1")
  3. (setq size1 (atoi (get_tile "h1")))
  4. (setq size2 (atoi (get_tile "h2")))
  5. )
  6. (setq done t)
  7. (done_dialog)
  8. )
  9. (action_tile "accept"  "(OnOK)")
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 08:26:05 | 显示全部楼层
请澄清一下,你在哪里进行的测试?
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:32:43 | 显示全部楼层
测试代码,并注意到命令行的返回值将为零。
  1. (get_tile "rad1"); nil
  2. (get_tile "h1") ; nil
  3. (get_tile "h2"); nil
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 08:38:27 | 显示全部楼层
这应该满足您的期望:
  1. (defun c:Test (/ dcl_id lst1 lst2 val1 val2 size1 size2)
  2. (setq dcl_id (load_dialog "txt.dcl"))
  3. (if (not (new_dialog "txt" dcl_id))
  4.    (exit)
  5. )
  6. (start_list "h1")
  7. (mapcar 'add_list  (setq lst1 '("50" "75" "100" "125" "150" "200" "250" "300" "350" "400" "450" "500" )))
  8. (end_list)
  9. (start_list "h2")
  10. (mapcar 'add_list (setq lst2 '("550" "600" "650" "700" "750" "800" "850" "900"  "950" "1000" )))
  11. (end_list)
  12. (set_tile "rad1" "1")
  13. (action_tile  "rad1" "(setq val1 $value)(mode_tile "h1" (boole 1 1 0))(mode_tile "h2" (boole 1 1 (atoi val1)))" )
  14. (action_tile  "rad2"  "(setq val2 $value)(mode_tile "h2" (boole 1 1 0))(mode_tile "h1" (boole 1 1 (atoi val2)))" )
  15.    (defun OnOK ()
  16.                (cond ((= (get_tile "rad1") 1) (setq size1 (nth (atoi (get_tile "h1")) lst1)))
  17.                        ((= (get_tile "rad2") 1) (setq size1 (nth (atoi (get_tile "h2")) lst2)))
  18.                        )
  19. (setq done t)
  20. (done_dialog)
  21. )
  22.   (action_tile "accept"  "(OnOK)")
  23. (action_tile "cancel" "(setq done nil)(done_dialog)")
  24. (start_dialog)
  25. (unload_dialog dcl_id)
  26. [color=red][b] (print size1)[/b][/color]
  27. (princ)
  28. )
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:45:34 | 显示全部楼层
get\u tile函数的值将是一个字符串,因此我们应该用一个字符串而不是像这样的数字来测试它。。
  1. 6
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 08:49:31 | 显示全部楼层
谢谢你的时间和宝贵的帮助。
 
非常感谢。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 09:00:15 | 显示全部楼层
不客气,塔瓦!
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 09:03:50 | 显示全部楼层
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-9 21:27 , Processed in 1.147490 second(s), 72 queries .

© 2020-2025 乐筑天下

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