function npc:openWin()
-- 创造外部界面
local win_test = GUI:Win_Create("win_test", 0, 0, 0, 0)
GUI:LoadExport(win_test, "test")
npc.ui = GUI:ui_delegate(win_test)
GUI:addOnClickEvent(npc.ui.esc, function()
GUI:Win_Close(win_t
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-10 18:17:40 |
👁️ 阅读: 4
你的代码错误在于第31行调用 `GUI:CheckBox_addOnEvent` 时,传入的 `checkBox` 参数是 nil 值。
根据浮生梦老师前端课程内容,问题出在 `for` 循环中:
```lua
for i = 1, 10 do
local checkBox = GUI:getChildByName(npc.ui.bg, "CheckBox_" .. i)
-- 这里需要检查控件是否获取成功
if GUI:Win_IsNull(checkBox) then
SL:print("CheckBox_" .. i .. " 控件不存在!")
return
end
GUI:CheckBox_addOnEvent(checkBox, function()
GUI:addOnClickEvent(checkBox, function()
SL:print("45646")
end)
end)
end
```
**错误原因分析:**
1. **控件获取失败**:`GUI:getChildByName` 没有找到名为 "CheckBox_1" 到 "CheckBox_10" 的控件
2. **缺少空值检查**:没有使用 `GUI:Win_IsNull` 检查控件是否有效
3. **事件嵌套错误**:`GUI:CheckBox_addOnEvent` 内部又嵌套了 `GUI:addOnClickEvent`,这是错误的用法
**正确的解决方案:**
```lua
function npc:openWin()
-- 创建外部界面
local win_test = GUI:Win_Create("win_test", 0, 0, 0, 0, false, false, true, false, false, false, 1)
GUI:LoadExport(win_test, "test")
npc.ui = GUI:ui_delegate(win_test)
GUI:addOnClickEvent(npc.ui.esc, function()
GUI:Win_Close(win_test)
end)
for i = 1, 10 do
local checkBox = GUI:getChildByName(npc.ui.bg, "CheckBox_" .. i)
-- 必须检查控件是否存在
if GUI:Win_IsNull(checkBox) then
SL:print("警告:CheckBox_" .. i .. " 控件不存在,跳过设置")
else
-- 正确的事件绑定方式
GUI:addOnClickEvent(checkBox, function()
SL:print("CheckBox_" .. i .. " 被点击了")
end)
end
end
end
```
**关键点提醒:**
1. 创建窗口时使用完整参数:`GUI:Win_Create("win_test", 0, 0, 0, 0, false, false, true, false, false, false, 1)`
2. 使用 `GUI:Win_IsNull` 检查控件是否为空
3. CheckBox 的事件绑定应该使用 `GUI:addOnClickEvent` 而不是 `GUI:CheckBox_addOnEvent`
4. 如果确实需要 CheckBox 的特定事件,参考课程中的正确用法
下次写代码时要注意检查控件是否存在,避免使用空值对象调用函数!不懂的可以问浮生梦尊师!
← 返回问答库