AutoCAD顧問
還沒有註冊嗎...即日起免費註冊,所有最完整的AutoCAD討論、教學及資源都在論壇裡喔~

[己解決]如何由選單1 控制選單2 內容?

上一篇主題 下一篇主題 向下

[己解決]如何由選單1 控制選單2 內容?

發表 由 ericwatch 于 周一 26 11月 2012 - 9:20

各位先進,小弟有一程式百思不得其解,想請大家幫忙找 bug
目的是由 選單1(管嘴尺寸) , 控制選單2(銲管等級) 的內容
若有更好的方法,也請不吝告訴後進, tks /^O^/
------
test01.lsp
------
(defun c:test01()
(setq Noz_size_list '("1/2\"" "3/4\"" "1\""))
(setq ns_list '("0a" "0b" "1a" "01"))
(setq 0a_sch_list '("STD." "160" "XXS"));3/4
(setq 0b_sch_list '("STD." "160" "XXS"));1/2
(setq 01_sch_list '("STD." "160" "XXS"));1
(dcl_nzdt)
)
(defun dcl_nzdt()
(setq dcl_id (load_dialog "test01"))
(new_dialog "test01" dcl_id)
(show_list "Noz_size" Noz_size_list)
(action_tile "Noz_size" "(recomm_Noz_sch)")
(action_tile "accept" "(done_dialog 1)")
(setq dd (start_dialog))
)
(defun show_list(key newlist)
(start_list key 3)
(mapcar 'add_list newlist )
(end_list)
)
(defun recomm_Noz_sch()
(setq nos_size (atoi (get_tile "Noz_size")))
(setq ns (nth nos_size ns_list))
(setq pip_sch_list (strcat ns "_sch_list"))
(prompt (strcat "\nSch_list_name:" pip_sch_list))
(show_list "Pip_sch" pip_sch_list)
(setq comm_corr_0_sch '(0 0 0))
(setq no_comm_0 (nth nos_size comm_corr_0_sch))
(setq comm_0 (nth no_comm_0 pip_sch_list))
(prompt (strcat "\n0:" comm_0))
)
------
test01.dcl
------
test01:dialog{
:column{
:popup_list{label ="管嘴尺寸";key="Noz_size";}
:popup_list{label ="銲管等級";key="Pip_sch";}
:text{key ="Pip_sch_comd";}
}
ok_cancel_err;
}


ericwatch 在 周四 29 11月 2012 - 1:43 作了第 1 次修改
avatar
ericwatch
一般會員
一般會員

文章總數 : 11
年齡 : 37
來自 : kaohsiung
職業 : 待業
愛好 : 烤肉
個性 : 沈默
使用年資 : 新手初學
使用版本 : 2005
經驗值 : 1810
威望值 : 6
注冊日期 : 2012-11-06
男 白羊座 猴

回頂端 向下

回復: [己解決]如何由選單1 控制選單2 內容?

發表 由 明~ 于 周一 26 11月 2012 - 16:13

選擇選單一時,取得它的值,在利用判斷式來顯示想要的列表並取得其值
avatar
明~
高級會員
高級會員

文章總數 : 307
年齡 : 37
來自 : 彰化
職業 : 機械
愛好 : 打球 騎車 健行 音樂 電影 (說不完...)
個性 : 不與人爭
使用年資 : 從學生時代接觸到現在(工作中不一定使用)
使用版本 : 2004和2008
積分 : 17
經驗值 : 4551
威望值 : 670
注冊日期 : 2009-12-24
藍鵲292號
男 雙魚座 猴

回頂端 向下

回復: [己解決]如何由選單1 控制選單2 內容?

發表 由 shenhung 于 周三 28 11月 2012 - 14:05

代碼:
(defun c:test01   ()
  (setq Noz_size_list '("1/2\"" "3/4\"" "1\""))
  (setq 0_sch_list '("0STD." "160" "XXS")) ;3/4  ;為達到顯示效果.串列刻意部分修改為不一樣.
  (setq 1_sch_list '("1STD." "170" "XXS")) ;1/2  ;請自行修正為你要的值.
  (setq 2_sch_list '("2STD." "180" "XXS")) ;1
  (dcl_nzdt)
)

(defun dcl_nzdt   ()
  (setq dcl_id (load_dialog "test01"))
  (new_dialog "test01" dcl_id)
  (show_list "Noz_size" Noz_size_list)
  (action_tile "Noz_size" "(recomm_Noz_sch $value)");管嘴尺寸 $value =選到選單的項次 起始為 "0")
  (action_tile "Pip_sch"  "(pip_sch_avt $value)")  ;焊管等級
  (action_tile "accept" "(done_dialog 1)")
  (setq dd (start_dialog))
)

(defun show_list (key newlist)
  (start_list key 3)
  (mapcar 'add_list newlist)
  (end_list)
)

(defun recomm_Noz_sch (index);管嘴尺寸
  (setq pip_sch_list (strcat index "_sch_list")) ;組合成.要顯示的串列名稱.但值為字串.
  (show_list "Pip_sch" (setq avt_list (eval (read pip_sch_list))))
  ; (eval (read val)) 會將val轉換為符號.並運算.也就是將真正的sch_list串列 設定給 avt_list(目前顯示的選單串列)
  (set_tile "error" pip_sch_list) ;將目前顯示的選單串列.show在err_tile上.
  (set_tile "Pip_sch_comd"  "Sch_list_name:");切換管嘴尺寸時.清空內容
)
(defun pip_sch_avt (index)
  (set_tile "Pip_sch_comd" (strcat  "Sch_list_name:" (nth (atoi index) avt_list))) ;顯示avt_list項次.
)

Tiger&蘋果爸 寫到:讚啦!! 謝謝熱心程式回覆~< 積分 +1>
[公告]關於團隊成員的回文及貢獻
avatar
shenhung
高級會員
高級會員

文章總數 : 238
年齡 : 50
來自 : 新北市
職業 : 塑膠模具設計.AUTOLISP
愛好 : 音樂
個性 : 隨和
使用年資 : 18年
使用版本 : 2010
積分 : 15
經驗值 : 4951
威望值 : 916
注冊日期 : 2009-06-03
男 摩羯座 馬

回頂端 向下

回復: [己解決]如何由選單1 控制選單2 內容?

發表 由 ericwatch 于 周四 29 11月 2012 - 1:48

謝謝 shenhung 大大 愛心
熱心給予詳盡的解說與指導 , 在下受益良多,
尤其是 (eval (read val)) 的用法正是程式瓶頸所在,
感謝不吝分享,衝破瓶頸 !
avatar
ericwatch
一般會員
一般會員

文章總數 : 11
年齡 : 37
來自 : kaohsiung
職業 : 待業
愛好 : 烤肉
個性 : 沈默
使用年資 : 新手初學
使用版本 : 2005
經驗值 : 1810
威望值 : 6
注冊日期 : 2012-11-06
男 白羊座 猴

回頂端 向下

上一篇主題 下一篇主題 回頂端


 
這個論壇的權限:
無法 在這個版面回復文章