![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Вопрос с 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;Последний раз редактировалось Admin, 10.04.2008 в 10:35. |
|
#2
|
|||
|
|||
|
Цитата:
case Tag of 1: ItemsDel([Text, cmp_cb_AfterBy.Text, cmp_cb_LastBy.Text], [cmp_cb_AfterBy, cmp_cb_LastBy]); Ведь это не содержимое комбобоксов, а только их видимые строки. |