You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maxscript中为按钮添加带下划线快捷键标记的实现问题

解决方案

方案1:启用系统原生控件渲染(官方规范方案)

3ds Max 自定义Rollout默认采用自绘控件逻辑,不识别&前缀的助记符规则,你只需要在创建对话框时添加style:#systemControlDialog参数,即可启用Windows原生控件渲染,此时&前缀会自动转换为对应字母的下划线,交互逻辑和系统自带的queryBox完全一致:

try destroyDialog testRol catch()
rollout testRol "测试对话框" (
  button btn_yes "&是" width:120 across:2
  button btn_no "&否" width:120
  
  on btn_yes pressed do print "选择了是"
  on btn_no pressed do print "选择了否"
)
-- 关键参数启用原生控件风格
createDialog testRol 260 45 style:#systemControlDialog

该方案无需硬编码特殊字符,后续修改按钮文本时仅需调整&的位置即可,交互符合系统默认规范,是最优解。

方案2:自定义实现(适配特殊UI需求)

如果你需要保留3ds Max默认的自绘控件风格,可手动添加下划线并绑定键盘事件实现同等效果,注意组合下划线字符\x0332需要放在目标字母后方,不要放在前方,即可避免位置偏移问题:

try destroyDialog testRol catch()
rollout testRol "测试对话框" width:260 (
  button btn_yes "Y̲es" width:120 across:2
  button btn_no "N̲o" width:120

  -- 绑定键盘事件,按对应字母直接触发按钮
  on testRol keyDown key do
  (
    if key == "y" or key == "Y" then btn_yes.pressed()
    if key == "n" or key == "N" then btn_no.pressed()
  )
  
  on btn_yes pressed do print "选择了Yes"
  on btn_no pressed do print "选择了No"
)
createDialog testRol

内容的提问来源于stack exchange,提问作者Ste

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:54:03