Тема: Динамическое формирование списка связанного с предыдущим выбором
Имеем одну форму, в которой два списка и второй должен динамически меняться в зависимости от выбора в первом. Как это сделать?
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → DCL → Динамическое формирование списка связанного с предыдущим выбором
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Имеем одну форму, в которой два списка и второй должен динамически меняться в зависимости от выбора в первом. Как это сделать?
В качестве варианта. Проверял на 2004.
Файл tmp.dcl
tmp :dialog { :popup_list {key="first_list"; width=20; "Выбирай\nЕдиницы\nДесятки"; action= "(cond" "((= \"1\" $value) (start_list \"second_list\") (mapcar 'add_list '(\"01\" \"02\" \"03\" \"04\" \"05\" \"06\" \"07\" \"08\" \"09\")) (end_list))" "((= \"2\" $value) (start_list \"second_list\") (mapcar 'add_list '(\"10\" \"20\" \"30\" \"40\" \"50\" \"60\" \"70\" \"80\" \"90\")) (end_list)))" ;} :popup_list {key="second_list"; width=20; list="";} ok_only; }
Файл temp.lsp
(defun test_dcl ( / ID_dcl num what ) (setq ID_dcl (load_dialog "c:\\tmp.dcl")) (new_dialog "tmp" ID_dcl) (start_dialog) (unload_dialog ID_dcl) ) ; defun
а как записать дополнительно изменения в edit_box?
кстати если задается больше 6 элементов, прога слетает, этого можно как-нить избежать?
> Novichek
С помощью (action_tile ...) с ключом для своего edit_box.
кстати если задается больше 6 элементов, прога слетает, этого можно как-нить избежать?
Больше "6 элементов" чего? Научись вопросы задавать. А то будешь долго обижаться на участников форума, что "злые и не добрые".
На предыдущий пост "Можно ли упростить работу со списками" ответа можешь долго ждать: ничего не понятно из твоего вопроса.
В теле программы нет ни одного списка. А показывать на пальцах за тысячи километров бесполезно.
6 элементов списка в функции "(cond"
:popup_list{key="PROJECT";label= "Номер проекта";width= 10;height=3;list="\n2764 (2433)\n2750\n2768 (1740)\n2769 (2215)\n2766 (2434)\n2721\n2451\n2715 (1323)\n2726\n 2450\n2561\n2717 (2718)\n2773 (2688)\n2771 (2193)\n2244 (2772)\n2642\n2643"; action= "(cond" "((= \"0\" $value) (start_list \"MARKA\") (mapcar 'add_list '(\"11\")) (end_list))" "((= \"1\" $value) (start_list \"MARKA\") (mapcar 'add_list '(\"11\")) (end_list))" "((= \"2\" $value) (start_list \"MARKA\") (mapcar 'add_list '(\"11\")) (end_list))" "((= \"3\" $value) (start_list \"MARKA\") (mapcar 'add_list '(\"9\")) (end_list))" "((= \"4\" $value) (start_list \"MARKA\") (mapcar 'add_list '(\"9\")) (end_list))" "((= \"5\" $value) (start_list \"MARKA\") (mapcar 'add_list '(\"9\")) (end_list)))";
если значение больше чем "((= \"5\" $value), т.е. 6 элемент первого списка, то все слетает: "неверно сформирванный список на входе"
а так все прекрасно работает.
с (action_tile ...) не совсем понятно. там значения должны меняться также динамически. Т.е. при выборе значения из первого списка, изменяются 3 поля: значение во 2м списке, и значения в 2х edit_box'ах.
> Novichek
Скорее всего это связано с ограничением на длину строки для атрибута action.
> Novichek
Соответственно, если правильно понял, надо сделать через (action_tile ...).
Файл меню:
tmp :dialog {width= 33; :popup_list { key="PROJECT"; label= "Номер проекта"; list="2764 (2433)\n2750\n2768 (1740)\n2769 (2215)\n2766 (2434)\n2721\n2451\n2715 (1323)\n2726\n2450\n2561\n2717 (2718)\n2773 (2688)\n2771 (2193)\n2244 (2772)\n2642\n2643"; } :popup_list {key="MARKA"; list="11"; width=25;} :edit_box {key="edit1"; value="MARKA 11"; width=25;} :edit_box {key="edit2"; value="marka 11"; width=25;} ok_only; }
Файл программы:
(defun tmp ( / ID_dcl pr_val ) (setq ID_dcl (load_dialog "c:\\tmp.dcl")) (new_dialog "tmp" ID_dcl) (action_tile "PROJECT" "(setq pr_val $value) (tmp1)") (start_dialog) (unload_dialog ID_dcl) ) ; defun tmp (defun tmp1 ( / ) (cond ((= "0" pr_val) (start_list "MARKA") (add_list "11") (end_list) (set_tile "edit1" "MARKA 11") (set_tile "edit2" "marka 11")) ((= "1" pr_val) (start_list "MARKA") (add_list "11") (end_list) (set_tile "edit1" "MARKA 11") (set_tile "edit2" "marka 11")) ((= "2" pr_val) (start_list "MARKA") (add_list "11") (end_list) (set_tile "edit1" "MARKA 11") (set_tile "edit2" "marka 11")) ((= "3" pr_val) (start_list "MARKA") (add_list "9") (end_list) (set_tile "edit1" "MARKA 9") (set_tile "edit2" "marka 9")) ((= "4" pr_val) (start_list "MARKA") (add_list "9") (end_list) (set_tile "edit1" "MARKA 9") (set_tile "edit2" "marka 9")) ((= "5" pr_val) (start_list "MARKA") (add_list "9") (end_list) (set_tile "edit1" "MARKA 9") (set_tile "edit2" "marka 9")) ((= "6" pr_val) (start_list "MARKA") (add_list "9") (end_list) (set_tile "edit1" "MARKA 9") (set_tile "edit2" "marka 9")) ((= "7" pr_val) (start_list "MARKA") (add_list "10") (end_list) (set_tile "edit1" "MARKA 10") (set_tile "edit2" "marka 10")) ((= "8" pr_val) (start_list "MARKA") (add_list "10") (end_list) (set_tile "edit1" "MARKA 10") (set_tile "edit2" "marka 10")) ) ; cond ) ; defun tmp1
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → DCL → Динамическое формирование списка связанного с предыдущим выбором
Форум работает на PunBB, при поддержке Informer Technologies, Inc