Вопрос с 3-мя combobox'aми.
Combobox1 содержит (1, 2, 3, 4, 5)
Combobox2 содержит (1, 2, 3, 4, 5)
Combobox3 содержит (1, 2, 3, 4, 5)
Например если выбираем в первом значение 1, тогда во 2-ом и 3-ем это значение удаляется. Потом если выбираем в первом значение 2, тогда во 2-ом и 3-ем удаляется значение 2 и возвращается значение удаленное в первом случае 1 (Аналогичные операции должны производится при работе с любым из 3-х Combobox'ов).
Я попытался сделать так, но видимо чтото опускаю и внекоторых случаях удаляется дополнительно еще какой-то Item. Помогите найти ошибку.
Код:
{ Обработчик нажатия на один из 3-х ComboBox'ов }
procedure Tform_Sort.event_cb_Click(Sender: TObject);
begin
with TComboBox(Sender) do
case Tag of
1:
ItemsDel([Text, cmp_cb_AfterBy.Text, cmp_cb_LastBy.Text], [
cmp_cb_AfterBy, cmp_cb_LastBy]);
2:
ItemsDel([Text, cmp_cb_SortBy.Text, cmp_cb_LastBy.Text], [
cmp_cb_SortBy, cmp_cb_LastBy]);
3:
ItemsDel([Text, cmp_cb_SortBy.Text, cmp_cb_AfterBy.Text], [
cmp_cb_SortBy, cmp_cb_AfterBy]);
end;
end;
А вот собственно и сама проверка и удаление Itema
Код:
procedure Tform_Sort.ItemsDel(const CompareItems: array of String;
Controls: array of TComboBox);
var
i, k, Index: Integer;
begin
for i := Low(Controls) to High(Controls) do
with Controls[i] do
begin
Items.Clear;
Items.AddStrings(DefItems);
for k := Low(CompareItems) to High(CompareItems) do
begin
Index := Items.IndexOf(CompareItems[k]);
if Index <> -1 then
Items.Delete(Index);
end;
end;
end;