Форум: "Основная";
Текущий архив: 2009.11.08;
Скачать: [xml.tar.bz2];
ВнизСкрыть определённые строки в 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c