无法将数据设置为comboBox的选项

我已经试了几天来创建一个包含所有可用模型的comboBox。 代码如下

for name , models in SortedPairs( player_manager.AllValidModels() ) do
   print("name: "..name.." model: "..models)
   custCbox:AddChoice(name , models , false)
end

我试图打印每个名称和模型来确定是否错了,但没问题:名称已经打印了显示名称,而模型已经打印了路径。 OnSelect函数如下:

custCbox.OnSelect = function( index, value, data )
   modelPanel:SetModel( data )
   print("Data " .. data)
   print("Value " .. value)
end

数据显示名称,值显示数字。为什么?

点赞
用户2858170
用户2858170

DComboBox文件说明中:

local cbox = vgui.Create( "DComboBox", BGPanel )

...

cbox:AddChoice( "Pink", Color( 255, 0, 255 ) )

function cbox:OnSelect( index, text, data )

    -- 设置背景面板颜色
    BGPanel:SetBackgroundColor( data )

end

请注意,与您的不同之处是:

custCbox.OnSelect = function( index, value, data )
   modelPanel:SetModel( data )
   print("Data " .. data)
   print("Value " .. value)
end

等价于

function custCbox.onSelect(index, value, data)
-- ...
end

而使用冒号语法的示例为:

function cbox:OnSelect(index, text, data)
end

相当于

function cbox.OnSelect(self, index, text, data)
end

这种区别会使函数参数移位1。 因此,您认为是index实际上是你的组合框,text是所选索引,data是选择的文本。

请阅读

Lua 5.4参考手册:3.4.10函数调用

Lua 5.4参考手册:3.4.11函数定义

这是初学者经常犯的常见错误。

2021-02-02 08:40:13