过滤多数组表

时间:2019-05-16 04:02:08

标签: lua

假设我有2个组合框。第一个组合框用于一个类别,另一个组合框用于单位。我做了这样的数组表:

Table1 = {
     Cat = 'Angle',
     Unit = {'Degree','Gradian','Radian'}}

Table2 = {
     Cat = 'Area',
     Unit = {'Acres','Hectares','Square centimeter','Square feet','Square inch',
        'Square kilometer','Square meter','Square mile','Square milimeter',
        'Square Yard'}}

Table3 = {
    Cat = 'Energy',
    Unit = {'British Thermal Unit','Calorie','Electron-Volts','Food-Pound',
        'Joule','Kilocalorie','Kilojoule'}}

Table4 = {
    Cat = 'Length',
   Unit = {'Angstrom','Centimeters','Chain','Phantom',
        'Feed','Hand','Inch','Kilometers','Link','Meter','Microns','Mile',
        'Milimemters','Nanometer','Nautical Mile','Pica','Rods','Span','Yard'}}

如何仅对cat元素(类别)将元素附加到第一组合框? 然后第二个组合框会根据组合框1上的类别自动添加单位吗?

谢谢

2 个答案:

答案 0 :(得分:0)

只需将所有表放入一个数组即可。我不知道您如何需要组合框的数据,但是此示例应为您提供帮助。

local idx = 1 -- box index 

local boxValues = {
  {
    Cat = 'Angle',
    Unit = {'Degree','Gradian','Radian'}
  }, {
    Cat = 'Area',
    Unit = {
      'Acres','Hectares','Square centimeter','Square feet','Square inch',
      'Square kilometer','Square meter','Square mile','Square milimeter',
      'Square Yard'
    }
  }, {
    Cat = 'Energy',
    Unit = {
      'British Thermal Unit','Calorie','Electron-Volts','Food-Pound',
      'Joule','Kilocalorie','Kilojoule'
    }
  }, {
    Cat = 'Length',
    Unit = {
      'Angstrom','Centimeters','Chain','Phantom',
      'Feed','Hand','Inch','Kilometers','Link','Meter','Microns','Mile',
      'Milimemters','Nanometer','Nautical Mile','Pica','Rods','Span','Yard'
    }
  }
}

local catBox, unitBox = boxValues[idx].Cat, boxValues[idx].Unit

catBox中选择一个值后,您必须更新idx

答案 1 :(得分:0)

我试图解决此案。注意:我是使用CE Lua Script for GUI等实现的。

    form = createForm()  -- create the form

    cbCategory = createComboBox(form) -- Category Combobox
    cbCategory.setPosition(10,10)
    cbCategory.Style = 'csDropDownList'

    cbUnitFrom = createComboBox(form) -- Source Unit Combobox
    cbUnitFrom.setPosition(10,40)
    cbUnitFrom.Style = 'csDropDownList'

    cbUnitTo = createComboBox(form)  -- Result Unit Combobox
    cbUnitTo.setPosition(10,70)
    cbUnitTo.Style = 'csDropDownList'

    -- show the form
    form.show()

    Category   = {'Angle','Area','Energy','Length','Power','Pressure','Temperature',
              'Time','Velocity','Volume','Weight','Bytes'}

    Angle       = {'Degree','Gradian','Radian'}
    Area        = {'Acres','Hectares','Square centimeter','Square feet','Square inch',
                   'Square kilometer','Square meter','Square mile','Square milimeter',
                   'Square Yard'}
    Energy      = {'British Thermal Unit','Calorie','Electron-Volts','Food-Pound',
                   'Joule','Kilocalorie','Kilojoule'}
    Length      = {'Angstrom','Centimeters','Chain','Phantom',
                   'Feed','Hand','Inch','Kilometers','Link','Meter','Microns','Mile',
                   'Milimemters','Nanometer','Nautical Mile','Pica','Rods','Span','Yard'}
    Power       = {'BTU/Minute','Food-Pound/minute','Horse power','Kilowatt','Watt'}
    Pressure    = {'Atmosphere','Bar','Kilo Pascal','Millimeter of Mercury','Pascal',
                   'Pound per square inch/PSI'}
    Temperature = {'Degree Celcius','Degree Farenheit','Degree Reaumur','Kelvin'}
    Time        = {'Year','Month','Week','Day','Hour','Minute','Second','Millisecond'}
    Velocity    = {'Centimeter per second','Feet per second','Kilometer per hour',
                   'Knots','Marc (at std.atm)','Meter per second','Miles per hour'}
    Volume      = {'Cubic centimeter','Cubic feet','Cubic inch','Cubic meter',
                  'Cubic yard','Fluid ounce (UK)','Fluid ounce (US)','Gallon (UK)',
                  'Gallon (US)','Liter','Pint (UK)','Pint (US)','Quart (UK)','Quart (US)'}
    Weight      =   'Carat','Centigram','Decigram','Dekagram','Gram','Hectogram','Kilogram',
               'Long ton','Milligram','Ounce','Pound','Short ton','Stone','Tonne'}
    Bytes       = {'Exabyte','Petabyte','Terabyte','Gigabyte','Megabyte','Kilobyte','Byte'}


    local itemsCB1 = cbCategory.Items
    local itemsCB2 = cbUnitFrom.Items
    local itemsCB3 = cbUnitTo.Items

    ----- Add items to Category combobox
    for i,v in ipairs(Category) do
     strings_add(itemsCB1, v)
    end

    cbCategory.ItemIndex = 0
    cbUnitFrom.ItemIndex = 0
    cbUnitTo.ItemIndex = 0

   function cbUnit()
    local cat = cbCategory.ItemIndex
    if cat == nil then return nil end
     if cat == 0 then -- Angle
     cbUnitFrom.Items.clear()
     cbUnitTo.Items.clear()
     for i,v in ipairs(Angle) do
      strings_add(itemsCB2, v)
      strings_add(itemsCB3, v)
     end
    cbUnitFrom.ItemIndex = 0
    cbUnitTo.ItemIndex = 0

    elseif cat == 1 then -- Area
    cbUnitFrom.Items.clear()
    cbUnitTo.Items.clear()
     for i,v in ipairs(Area) do
      strings_add(itemsCB2, v)
      strings_add(itemsCB3, v)
     end
    cbUnitFrom.ItemIndex = 0
    cbUnitTo.ItemIndex = 0

    elseif cat == 2 then -- Energy
    cbUnitFrom.Items.clear()
    cbUnitTo.Items.clear()
    for i,v in ipairs(Energy) do
     strings_add(itemsCB2, v)
     strings_add(itemsCB3, v)
    end
    cbUnitFrom.ItemIndex = 0
    cbUnitTo.ItemIndex = 0

    elseif cat == 3 then -- Length
     cbUnitFrom.Items.clear()
     cbUnitTo.Items.clear()
     for i,v in ipairs(Length) do
      strings_add(itemsCB2, v)
      strings_add(itemsCB3, v)
     end
     cbUnitFrom.ItemIndex = 0
     cbUnitTo.ItemIndex = 0

    elseif cat == 4 then -- Power
    cbUnitFrom.Items.clear()
    cbUnitTo.Items.clear()
     for i,v in ipairs(Power) do
      strings_add(itemsCB2, v)
      strings_add(itemsCB3, v)
     end
    cbUnitFrom.ItemIndex = 0
    cbUnitTo.ItemIndex = 0

    elseif cat == 5 then -- Pressure
    cbUnitFrom.Items.clear()
    cbUnitTo.Items.clear()
     for i,v in ipairs(Pressure) do
      strings_add(itemsCB2, v)
      strings_add(itemsCB3, v)
     end
    cbUnitFrom.ItemIndex = 0
    cbUnitTo.ItemIndex = 0

    elseif cat == 6 then -- Temperature
    cbUnitFrom.Items.clear()
    cbUnitTo.Items.clear()
     for i,v in ipairs(Temperature) do
     strings_add(itemsCB2, v)
     strings_add(itemsCB3, v)
    end
    cbUnitFrom.ItemIndex = 0
    cbUnitTo.ItemIndex = 0

    elseif cat == 7 then -- Time
     cbUnitFrom.Items.clear()
     cbUnitTo.Items.clear()
      for i,v in ipairs(Time) do
       strings_add(itemsCB2, v)
       strings_add(itemsCB3, v)
     end
     cbUnitFrom.ItemIndex = 0
     cbUnitTo.ItemIndex = 0

    elseif cat == 8 then -- Velocity
     cbUnitFrom.Items.clear()
     cbUnitTo.Items.clear()
      for i,v in ipairs(Velocity) do
       strings_add(itemsCB2, v)
       strings_add(itemsCB3, v)
      end
    cbUnitFrom.ItemIndex = 0
    cbUnitTo.ItemIndex = 0

    elseif cat == 9 then -- Volume
     cbUnitFrom.Items.clear()
     cbUnitTo.Items.clear()
      for i,v in ipairs(Volume) do
       strings_add(itemsCB2, v)
       strings_add(itemsCB3, v)
     end
    cbUnitFrom.ItemIndex = 0
    cbUnitTo.ItemIndex = 0

    elseif cat == 10 then -- Weight
     cbUnitFrom.Items.clear()
     cbUnitTo.Items.clear()
      for i,v in ipairs(Weight) do
       strings_add(itemsCB2, v)
       strings_add(itemsCB3, v)
     end
    cbUnitFrom.ItemIndex = 0
    cbUnitTo.ItemIndex = 0

    elseif cat == 11 then -- Bytes
     cbUnitFrom.Items.clear()
     cbUnitTo.Items.clear()
      for i,v in ipairs(Weight) do
       strings_add(itemsCB2, v)
       strings_add(itemsCB3, v)
      end
       cbUnitFrom.ItemIndex = 0
      cbUnitTo.ItemIndex = 0
    else
    return nil
    end
   end

    -- events handler
    cbCategory.OnChange = cbUnit
相关问题