桃花源 发表于 2023-7-7 14:35:46

DCL对话框设置三行三列的单选按钮怎么实现

新手小白,请教大家如上问题:即9个单选按钮不是框行或框列排列,而是三行三列均布,如何实现?

south 发表于 2023-7-7 15:32:30

不上代码怎么描述:L

vitalgg 发表于 2023-7-7 16:52:25






buttons:dialog {label = "buttons";key="title";
:row{
:column{
:toggle{key="slt1"; label="Select1";}
:toggle{key="slt2"; label="Select2";}
:toggle{key="slt3"; label="Select3";}
}
:column{
:toggle{key="slt4"; label="Select4";}
:toggle{key="slt5"; label="Select5";}
:toggle{key="slt6"; label="Select6";}
}
:column{
:toggle{key="slt7"; label="Select7";}
:toggle{key="slt8"; label="Select8";}
:toggle{key="slt9"; label="Select9";}
}
}
:spacer{} : column {: row { fixed_width = true; alignment = centered; : retirement_button { label ="Yes";key="accept";is_default=true;} :spacer{ width = 2; }:retirement_button {label= "No"; key ="cancel"; is_cancel = true;}}}}

桃花源 发表于 2023-7-7 17:51:11

本帖最后由 桃花源 于 2023-7-7 17:55 编辑

非常感谢热心的朋友,但是我的问题是9个三行三列的radio_button,即只能有一个被选中,而不是图片表示的

vitalgg 发表于 2023-7-7 18:35:03

本帖最后由 vitalgg 于 2023-7-7 20:08 编辑

那就需要写个回调函数了。

https://atlisp.cn/static/videos/multi-row-column-rb.mp4
(defun c:tt (/ dcl-fp rbn group-rb rb-value)
;;;; Model
(setq rbn 0) ;; 用于记录无线按钮总数
(setq group-rb "slt") ;; 用于控制 rb 系列的组名
(setq rb-value nil) ;; 用于最后选中的 rb 号
;;;; View
;; 生成 DCL 对话框文件,你也可以用自己的方法生成。生成的 dcl 文件在 temp 文件夹下。
(dcl:dialog "buttons")
(dcl:begin-cluster "radio_row" "")
(repeat 3
    (progn
      (dcl:begin-cluster "column" "")
      (repeat 3
      (write-line
          (strcat
            ":radio_button{key=\""
            group-rb
            (itoa (setq rbn (1+ rbn)))
            "\"; label=\""
            "Select"
            (itoa rbn)
            "\";action=\"(cb-rb $key)\";}" )
          dcl-fp))
      (dcl:end-cluster)
    ))
(dcl:end-cluster)
(dcl:end-dialog str-yes-no)
;;;; Control
;; 控制 多行多列无线按钮的选中与否
(defun cb-rb (key / i)
    (print key)
    (setq i 0)
    (repeat rbn
      (if (/= key (strcat group-rb (itoa (setq i (1+ i)))))
      (set_tile (strcat group-rb (itoa i)) "0")
      (set_tile (strcat group-rb (itoa i)) "1");;
      ))
    (setq rb-value key) ;; 最终选中的 rb
)
;;;; New
(dcl:new "buttons")
;;;; Init 该程序不需要
;;;; Show
(dcl:show)
rb-value
)

运行以上代码需要安装 @lisp 核心及@lisp函数库(函数库会自动下载安装)
安装请至 https://atlisp.cn
页: [1]
查看完整版本: DCL对话框设置三行三列的单选按钮怎么实现