Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
2-1253771858
Knight
2009-09-24 09:57
2009.11.08
Можно снять изображение с формы как-то ещё кроме GetFormImage?


3-1229329218
namco
2008-12-15 11:20
2009.11.08
sql server + delphi как сделать


6-1191102532
FearG0
2007-09-30 01:48
2009.11.08
Оценить поток на основе TClientSocket


15-1252512460
Kostafey
2009-09-09 20:07
2009.11.08
Синхронизация Mercurial-репозитариев с ограничением


15-1252276329
KilkennyCat
2009-09-07 02:32
2009.11.08
TTreeNode с Визибле-Невизибле





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский