无法将数据设置为组合框选项

Can't set the data to a comboBox choice

这几天我一直在尝试创建一个包含所有可用模型的组合框。 代码是这样

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

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

来自DComboBox documentation

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

...

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

function cbox:OnSelect( index, text, data )

    -- Set background panel color
    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

这个差异导致参数偏移一个。所以你认为 index 实际上是你的组合框,text 是选定的索引,data 是选择文本。

请阅读

Lua 5.4 Reference Manual: 3.4.10 Function Calls

Lua 5.4 Reference Manual: 3.4.11 Function Definitions

这是初学者很容易犯的错误。