Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.04.2008, 23:35
NeiL NeiL вне форума
Прохожий
 
Регистрация: 29.11.2007
Сообщения: 28
Репутация: 10
По умолчанию Помогите найти ошибку

Вопрос с 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  
Старый 10.04.2008, 12:35
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Цитата:
если выбираем в первом значение 1, тогда во 2-ом и 3-ем это значение удаляется
Если стоит такая задача, то непонятно, для чего передаются содержимое Text из других комбобоксов:
case Tag of
1:
ItemsDel([Text, cmp_cb_AfterBy.Text, cmp_cb_LastBy.Text], [cmp_cb_AfterBy, cmp_cb_LastBy]);
Ведь это не содержимое комбобоксов, а только их видимые строки.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:41.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter