Prevent duplicate items in list box and combo box

2019-04-15 14:59发布

问题:

I receive an XML file from internet (values ​from XML ​may vary, cause there are currencies). And then I load it to a list box 1. A user can add items to to list box 2 with some buttons (one by one, all, delete etc). So I want to prevent duplicates. I can't find any way to do this.

My list boxes:

Here is my code (for XML parsing part, see How to read multiple XML nodes? (Inno Setup)):

XMLNodeList := XMLDocument.SelectNodes('//listaPaises/item');
for Index := 0 to XMLNodeList.length - 1 do
begin
  XMLNode := XMLNodeList.item[Index];

  { Add country }
  comboBoxPais.Items.Add(XMLNode.SelectSingleNode('name').Text); 

  { Add currency }
  listBoxMonedasDisponibles.Items.Add(XMLNode.SelectSingleNode('suggestedCurrency').Text);

  listBoxMonedasDisponibles.ItemIndex := 0;
  comboBoxPais.ItemIndex := 0;
end;

回答1:

Both TComboBox.Items and TListBox.Items are of type TStrings.

Use TStrings.IndexOf, to test if a given string is already present. It returns a negative number (-1), if the string is not present.

{ Add S only, if not present already }
if comboBox.Items.IndexOf(S) < 0 then 
  comboBox.Items.Add(S);