你这种获取checkbox对象的方式有问题。`"npc.ui.checkbox"..i` 只是字符串拼接,并没有获取到实际的控件对象。
根据浮生梦老师前端课程内容,正确获取checkbox的方式应该是:
```lua
for i = 1, 10 do
-- 正确方式:通过父节点和ID获取控件
local checkBox = GUI:getChildByName(parentNode, "CheckBox_" .. i)
-- 或者如果你的UI是通过table管理的
-- local checkBox = ui["CheckBox_" .. i]
if GUI:Win_IsNotNull(checkBox) then
GUI:CheckBox_addOnEvent(checkBox, function(sender)
local isSelected = GUI:CheckBox_isSelected(sender)
SL:Print("CheckBox " .. i .. " 选中状态: " .. tostring(isSelected))
end)
end
end
```
**关键点:**
1. `GUI:getChildByName(parentNode, "控件ID")` - 通过父节点和控件ID获取对象
2. `GUI:Win_IsNotNull(widget)` - 先判断对象是否有效再使用
3. 在事件回调中,`sender`参数就是被点击的checkbox对象
如果你是通过UI编辑器创建的界面,通常会有一个`ui` table来管理所有控件,这样更简单:
```lua
for i = 1, 10 do
local checkBox = ui["CheckBox_" .. i]
if checkBox then
GUI:CheckBox_addOnEvent(checkBox, function(sender)
-- 处理选中事件
end)
end
end
```
记住:字符串只是控件的名称,需要通过函数获取到实际的控件对象才能操作!