for k, v in ipairs(npc.equipCategory) do -- 遍历一级菜单名
local btn1 = "btn1_"..k -- 一级菜单按钮
local yPos_1 = 404 - ((k-1)*35)
GUI:Button_Create(npc.ui.ListView_first, btn1, 0, yPos_1, "res/01/010006.
从错误信息来看,问题出在 `addOnClickEvent` 函数调用时,传入的按钮对象 `btn1` 是无效的。
**错误原因分析:**
1. `GUI:Button_Create()` 创建按钮时,第一个参数必须是有效的父节点对象
2. 你传入的 `npc.ui.ListView_first` 可能不是有效的控件对象
3. 或者按钮创建失败,导致 `btn1` 不是有效的控件对象
**修正方案:**
```lua
-- 首先检查父节点是否有效
if GUI:Win_IsNull(npc.ui.ListView_first) then
SL:Print("ListView_first 是无效的父节点")
return
end
for k, v in ipairs(npc.equipCategory) do
local btn1 = "btn1_"..k
local yPos_1 = 404 - ((k-1)*35)
-- 正确创建按钮,并获取返回的对象
local btnObj = GUI:Button_Create(npc.ui.ListView_first, btn1, 0, yPos_1, "res/01/010006.png")
-- 检查按钮是否创建成功
if GUI:Win_IsNull(btnObj) then
SL:Print("按钮创建失败: " .. btn1)
return
end
-- 使用返回的对象进行操作
GUI:Button_loadTexturePressed(btnObj, "res/01/010005.png")
GUI:Button_setTitleText(btnObj, v.title)
-- 使用正确的按钮对象添加点击事件
GUI:addOnClickEvent(btnObj, function()
-- 同样检查二级列表的父节点
if GUI:Win_IsNull(npc.ui.ListView_second) then
SL:Print("ListView_second 是无效的父节点")
return
end
GUI:removeAllChildren(npc.ui.ListView_second)
for x, y in ipairs(v.sub) do
local btn2 = "btn2_"..k.."_"..x
local yPos_2 = 404 - ((x-1)*35)
local btn2Obj = GUI:Button_Create(npc.ui.ListView_second, btn2, 0, yPos_2, "res/01/010006.png")
if not GUI:Win_IsNull(btn2Obj) then
GUI:Button_loadTexturePressed(btn2Obj, "res/01/010005.png")
GUI:Button_setTitleText(btn2Obj, y.name)
end
end
end)
end
```
**关键点:**
1. `GUI:Button_Create()` 返回的是按钮对象,不是字符串ID
2. 所有GUI操作都应该使用返回的对象,而不是字符串ID
3. 使用 `GUI:Win_IsNull()` 检查控件是否有效
4. 确保父节点 `npc.ui.ListView_first` 和 `npc.ui.ListView_second` 是有效的控件对象
下次写代码时要注意检查控件对象的有效性,不懂的可以问浮生梦尊师!