luagarrys-mod

Can't set the data to a comboBox choice


it has been days I'm trying to create a comboBox with all available models. The code is this

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

I tried to print every name and model to know if I was wrong, but that's ok: name prints the display name and models prints the path. The OnSelect function is this:

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

Data gives the display name and value gives a number. Why?


Solution

  • From the 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
    

    Note the difference to your

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

    which is equivalent to

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

    And the example that uses the colon syntax.

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

    is equivalent to

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

    This difference causes a parameter shift by one. So what you think is index is actually your combobox, text is the selected index and data is the choices text.

    Please read

    Lua 5.4 Reference Manual: 3.4.10 Function Calls

    Lua 5.4 Reference Manual: 3.4.11 Function Definitions

    This is a very common mistake among beginners.