Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.08;
Скачать: CL | DM;

Вниз

Скрыть определённые строки в ComboBox   Найти похожие ветки 

 
Jungle   (2008-10-03 08:15) [0]

Есть ли способ (помимо разработки собственного контрола) скрыть определённые строки в выпадающем списке ComboBox"а?
Это нужно для того, чтобы сохранились индексы элементов.

Т.е. если у меня есть список
111 // индекс 0
222 // индекс 1
333 // индекс 2

и я скрою 2-ю строку, то в выпадающем списке отобразится
111 // индекс 0
333 // индекс 2

При этом у элемента 333 индекс будет 2, а не 1


 
Сергей М. ©   (2008-10-03 08:39) [1]

Нет такого способа.
А собссно зачем это может понадобиться ?


 
Jungle   (2008-10-03 09:41) [2]


> А собссно зачем это может понадобиться ?

Допустим, есть несколько переменных типа TStrings с привязанными объектами, которые не изменяется в ходе работы. Индексы элементов в комбо-боксе должны соответствовать индексам в этих TStrings"ах, но при этом часть из элементов в комбо-боксе должна быть скрыта.
Соответственно, самым простым решением было бы просто сделать эти "ненужные" элементы скрытыми.


 
Сергей М. ©   (2008-10-03 09:50) [3]


> Индексы элементов в комбо-боксе должны соответствовать индексам
> в этих TStrings"ах


А разве что-то мешает хранить индексы элементов стринглистов в списке ComboBox.Items.Objects[] ?


 
Сергей М. ©   (2008-10-03 10:05) [4]

В конце-концов можно при событии OnDropDown удалять из списка ComboBox.Items те элементы, которые не должны фигурировать в выпадающем списке, а при событии OnCloseUp вставлять их на место. Св-во ComboBox.ItemIndex, если оно не равно -1 при вставках будет автоматически корректироваться самим компонентом.

ПРимер:

procedure TForm1.ComboBox1DropDown(Sender: TObject);
begin
 ComboBox1.Items.Delete(1);
end;

procedure TForm1.ComboBox1CloseUp(Sender: TObject);
begin
 ComboBox1.Items.Insert(1, "222");
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 showmessage(inttostr(ComboBox1.ItemIndex));
end;


 
Jungle   (2008-10-03 10:57) [5]

В 1-м варианте придётся держать (или динамически изменять) список объектов для индексов, во 2-м нужно формировать список исключаемых элементов.

2-й способ похуже, т.к. будут выполняться по 2 действия при каждом выборе, а в 1-м способе - единожды при формировании списка элементов.

Но меня интересовала возможность именно скрыть элементы. Как в меню. Например, послав некое сообщение контролу (что-нибудь вроде CB_SETITEMVISIBLE). Раскопки мсдн"а ничего не дали. Ну что ж - нельзя так нельзя.

В любом случае благодарю за конструктивные ответы :)


 
Сергей М. ©   (2008-10-03 11:11) [6]


> что-нибудь вроде CB_SETITEMVISIBLE


Тогда может быть стоит присмотреться к CB_SETITEMHEIGHT ?


 
{RASkov} ©   (2008-10-03 12:01) [7]

> Тогда может быть стоит присмотреться к CB_SETITEMHEIGHT ?

Некрасиво получается... :) Только что попробывал ComboBox1MeasureItem....
Например с клавиатуры можно выбрать итем, у которого высота=0...


 
KSergey ©   (2008-10-03 12:38) [8]

В общем счастья нет.
Только если не связывать буквально TStrings где хранится и TBomboBox.
Есть анальный способ хранить данные в каком-нибудь Memory DataSet, использовать какой-нибудь TDBComboBox и фильтровать по необходимости записи для выбора.


 
Сергей М. ©   (2008-10-03 12:38) [9]


> {RASkov} ©   (03.10.08 12:01) [7]


Ну тады остается только [3] и/или [4]


 
Сергей М. ©   (2008-10-03 12:41) [10]


> Есть анальный способ


Не такой уж он и анальный)
Если решать задачу с нуля, то такая организация вроде бы даже очевиднее и прямее/изящнее/удобнее



Страницы: 1 вся ветка

Текущий архив: 2009.11.08;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
15-1252387473
pavel_guzhanov
2009-09-08 09:24
2009.11.08
Кто-нибудь собирается на семинар?


2-1253861450
MonoLife
2009-09-25 10:50
2009.11.08
Уменьшение размера картинки


15-1252515306
Rule
2009-09-09 20:55
2009.11.08
Книга по (для) рисования.


2-1253654979
Евгений Р.
2009-09-23 01:29
2009.11.08
Использование $IFDEF


2-1253526247
Иван Василич
2009-09-21 13:44
2009.11.08
ADOQuery как вывести результат запроса ?