GUI:addOnClickEvent(ui.Button_1,function()
SL:print(config[1])
end)
GUI:addOnClickEvent(ui.Button_2,function()
SL:print(config[2])
end)
GUI:addOnClickEvent(ui.Button_3,function()
SL:print(config[3])
end)
GUI:addOnClickEvent(ui.Button_4
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-03-21 16:57:39 |
👁️ 阅读: 6
循环报错取不到值,主要原因是 `GUI:getChildByName(ui, 'Button_'..i)` 返回了 `nil`。
根据浮生梦老师前端课程内容,`GUI:getChildByName` 需要确保父节点 `ui` 是一个有效的控件对象,并且子节点的名称必须完全匹配。
**问题分析:**
1. **`ui` 对象不正确**:你的 `ui` 可能不是一个通过 `GUI:ui_delegate` 或类似方法获取的界面根节点,导致在其下找不到子节点。
2. **按钮名称不匹配**:按钮的实际名称可能不是 `"Button_1"` 这种格式,或者它们存在于另一个父节点下。
3. **缺少 `nil` 值判断**:直接对可能为 `nil` 的对象调用 `GUI:addOnClickEvent` 会导致错误。
**修改建议:**
在绑定事件前,先用 `GUI:Win_IsNull` 检查按钮是否存在。
```lua
for i = 1, 5 do
local btn = GUI:getChildByName(ui, "Button_" .. i)
if not GUI:Win_IsNull(btn) then
GUI:addOnClickEvent(btn, function()
SL:print(config[i])
end)
else
SL:print("按钮 Button_" .. i .. " 不存在")
end
end
```
**为什么上面的代码能运行?**
你上面那段重复代码 `ui.Button_1` 能运行,是因为 `ui` 可能是一个表(比如通过 `local ui = {}` 创建的),并且按钮对象已经作为属性(如 `ui.Button_1`)存储在其中。但 `GUI:getChildByName` 是严格根据节点层级和名称查找的,对路径要求更严格。
**调试步骤:**
1. 检查 `ui` 是否有效:`SL:print(GUI:Win_IsNull(ui))`
2. 确认按钮的实际名称和父节点。
3. 确保按钮已经创建并添加到正确的父节点下。
← 返回问答库