明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5888|回复: 14

DCL中两个下拉列表框popup_list如何关联?

[复制链接]
发表于 2011-2-12 15:57:44 | 显示全部楼层 |阅读模式

如何实现选择a中不同列表值时,b中列表关联变化,值也不同?
如a1对应a1b1,a1b2,a1b3;
a2对应a2b1,a2b2,a2b3;
a3对应a3b1,a3b2;

本帖子中包含更多资源

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

x
发表于 2011-2-14 15:39:22 | 显示全部楼层
本帖最后由 redcat 于 2011-2-14 15:41 编辑

拿去吧,比xyp1964要大方

  1. (defun c:ttt (/ data dcl_inf dclhandle)
  2.   (defun *error* (msg)
  3.     ;; Error Handler - will unload the dialog
  4.     ;; from memory should the user decide to hit Esc
  5.     (if dclHandle
  6.       (unload_dialog dclHandle)
  7.     )
  8.     (or (wcmatch (strcase msg t) "*break,*cancel*,*exit*,*取消*")
  9. (princ (strcat "\n** Error: " msg " **"))
  10.     )
  11.     (princ)
  12.   )

  13.   (defun updatelist (key lst)
  14.     (start_list key)
  15.     (mapcar 'add_list lst)
  16.     (end_list)
  17.   )
  18.   (defun makedcl_str2lst (str_lst / dclfile fileID dclHandle)
  19.     (setq dclfile (vl-filename-mktemp nil nil ".dcl")
  20.    fileID  (open dclfile "w")
  21.     )
  22.     (cond
  23.       ((= (type str_lst) 'str)
  24.        (write-line str_lst fileID)
  25.       )
  26.       ((= (type str_lst) 'list)
  27.        (foreach n str_lst (write-line n fileID))
  28.       )
  29.     )
  30.     (close fileID)
  31.     (setq dclHandle (load_dialog dclfile))
  32.     (vl-file-delete dclfile)
  33.     dclHandle
  34.   )
  35.   (setq dcl_inf "lbox : list_box { width = 25; fixed_width = true; alignment = centered; }\n
  36.                      listboxexample : dialog { label =\"列表对话框教程\";\n
  37.                      spacer;\n: row {\n: lbox { key = \"lst1\"; label = \"列表_1\" ; }\n
  38.                      :lbox { key = \"lst2\"; label = \"列表1关联数据\"; }\n
  39.                      }\n
  40.                      ok_only; \n}"
  41. dclHandle   (makedcl_str2lst dcl_inf)
  42.   )

  43.   ;; Data used to Populate List_Boxes:
  44.   ;; I've chosen to use this list structure because it suits the data, but there are many other possibilities.
  45.   (setq Data
  46.   '(("Audi" ("TTS Quattro" "TT RS" "S3 Quattro" "S4 Quattro" "S5 Quattro" "RS5 Quattro" "RS6 Quattro"))
  47.     ("BMW" ("M3" "M5" "M6" "X5" "Z3" "Z4"))
  48.     ("orsche" ("911" "924" "928" "930" "944" "Boxster" "Cayenne" "Cayman"))
  49.     ("Jaguar" ("XF" "XJ6" "XJR" "XKR" "X-Type" "S-Type"))
  50.    )
  51.   )
  52.   (cond
  53.     ((not (new_dialog "listboxexample" dclHandle))
  54.      (setq dclHandle (unload_dialog dclHandle))
  55.      (princ "\n** Dialog Definition not Found **")
  56.     )
  57.     (t
  58.      (or *Make* (setq *Make* "0"))
  59.      (or *Model* (setq *Model* "0"))
  60.      ;; Lets set up some default selections, for the first-time running of the program.
  61.      ;; The variables *Make* & *Model* are intended to be global and hence will remember the user's last selections.
  62.      ;; Now to populate the List_Boxes: List_Box 'lst1'
  63.      (UpdateList "lst1" (mapcar 'car Data))
  64.      (set_tile "lst1" *Make*)
  65.      ;; List_Box 'lst2'
  66.      (UpdateList "lst2" (cadr (nth (atoi *Make*) Data)))
  67.      (set_tile "lst2" *Model*)
  68.      (action_tile
  69.        "lst1"
  70.        (strcat "(UpdateList \"lst2\" (setq lst2 (cadr (nth (atoi (setq *Make* $value)) Data))))"
  71.         "(setq *Model*"       "  (set_tile \"lst2\""
  72.         " (if (< (atoi *Model*) (length lst2)) *Model* \"0\")"  "))"
  73.        )
  74.      )
  75.      (action_tile "lst2" "(setq *Model* $value)")
  76.      (start_dialog)
  77.      (setq dclHandle (unload_dialog dclHandle))
  78.     )
  79.   )
  80.   
  81.   (princ)
  82. )




回复 支持 1 反对 0

使用道具 举报

发表于 2011-2-12 21:31:38 | 显示全部楼层
(defun c:tt (/ elst lst1 lst21 lst22 lst23)
  (defun ap1 ()
    (xyp-Dcl-Gettile '("li1" "li2"))
    (cond ((= li1 "0") (xyp-show-list "li2" lst21))
   ((= li1 "1") (xyp-show-list "li2" lst22))
   ((= li1 "2") (xyp-show-list "li2" lst23)))
    (set_tile "li2" li2))
  (xyp-initSet '(li1 li2) '("0" "0"))
  (setq lst1  '("a1" "a2" "a3")
lst21 '("a1b1" "a1b2" "a1b3")
lst22 '("a2b1" "a2b2" "a2b3")
lst23 '("a3b1" "a3b2" "a3b3")
elst  '(("" "tt" ":boxed_column{")
  ("li1" "a" "poplist" "lst1" "16" "(ap1)")
  ("li2" "b" "poplist" "lst21" "16")
  "spacer;"
  "}"
  "spacer;"
  (nil nil "user" "(ap1)")))
  (xyp-Dcl-Init elst "【tt】" t)
  (princ)
)


本帖子中包含更多资源

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

x
回复 支持 1 反对 0

使用道具 举报

发表于 2018-7-17 10:50:48 | 显示全部楼层
我还是不是很明白,重新发了贴了。希望能理解
发表于 2011-2-12 16:21:00 | 显示全部楼层
本帖最后由 ZZXXQQ 于 2014-9-11 19:12 编辑

……
(setq pop1 '("a1" "a2" "a3"))
(setq pop2 '(("a1b1" "a1b2" "a1b3") ("a2b1" "a2b2" "a2b3") ("a3b1" "a3b2")))
……
(action_tile "a" "(chpop (atoi $value))")
……
(defun chpop (c)
(start_list "b")
(mapcar 'add_list (nth c pop2))
(end_list)
)
 楼主| 发表于 2011-2-14 11:43:57 | 显示全部楼层
多谢二位版主,XYP-INITSET函数在哪下载?
 楼主| 发表于 2011-2-15 11:59:25 | 显示全部楼层
多谢redcat
发表于 2012-10-22 14:32:49 | 显示全部楼层
ZZXXQQ 发表于 2011-2-12 16:21
……
(setq pop1 '("a1" "a2" "a3"))
(setq pop2 '(("a1b1" "a1b2" "a1b3") ("a2b1" "a2b2" "a2b3") ("a3 ...

stat_LIST是笔误 改为了start_LIST还是不行呢?
发表于 2013-7-27 23:19:45 | 显示全部楼层
正在找下拉资料,谢谢楼上的分享
发表于 2013-7-27 23:40:56 | 显示全部楼层
请教下怎样在下拉框里输入数字
发表于 2014-9-11 14:19:58 | 显示全部楼层
ZZXXQQ 发表于 2011-2-12 16:21
……
(setq pop1 '("a1" "a2" "a3"))
(setq pop2 '(("a1b1" "a1b2" "a1b3") ("a2b1" "a2b2" "a2b3") ("a3 ...

感谢Z版,把(action_tile "a" ( "(chpop (atoi $value))"))=>(action_tile "a" "(chpop (atoi $value))") 就OK了,再次膜拜Z版
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-21 01:47 , Processed in 0.185143 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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