Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];

Вниз

Много Combobox-ов с одним выпадающим списком   Найти похожие ветки 

 
den_c   (2003-04-10 21:08) [0]

У меня в приложении на разных формах есть Combobox-ы
Как сделать так чтобы выпадающий список у них содержал
одинаковые значения и обновлялся синхронно.
Т.е. я хочу чтобы существовал какой-то список из которого бы
Combobox-ы извлекали значения для показа, чтобы можно было добавить
в список элементы и они стали бы видны во всех Combobox.
Можно сделать примерно следующее

var MyList : TStringList; //глобальная переменная список строк для combobox-ов

initialization
MyList := TStringList.Create;
MyList.Add("111");
MyList.Add("222");

потом при создании формы для каждого Combobox-а

procedure TForm1.FormCreate(Sender: TObject);
begin
ComboBox1.Items := MyList;
ComboBox2.Items := MyList;
end;

однако если потом сделать
MyList.Add("333");
MyList.Add("444");

в Combobox-ах видны только первые два значения "111" и "222"

Можно конечно сделать для каждого Combobox-а в onDropDown

procedure TForm1.ComboBox1DropDown(Sender: TObject);
begin
ComboBox1.Items:=MyList;
end;

Но хочется сделать это проще...
Возможно ли это?


 
Sam Stone   (2003-04-10 21:30) [1]

Это если у тебя имена комбобоксов даны делбфёй
for i:=1 to <кол-во комбобоксов> do
TCombobox(FindComponent("Combobox"+IntToStr(i))).items.MyList;

Если сам писал им имена, то у каждого комбобокса в поле tag напиши какое-нить число(integer).

for i:=0 to componentcount-1 do
if Components[i].tag:=<число> then
TCombobox(Components[i]).Items:=MyList;

А чтоб при изменении MyList добавлялось в комбобокс, можно зделать вот чего: всем комбам прицепляешь ОДИН обработчик DropDown и тама пишешь: (Sender as TCombobox).Items:=MyList;

Надеюсь, ничего не наврал.


 
den_c   (2003-04-10 21:43) [2]

Тут даже вопрос не в том чтобы синхронно обновлять Items у каждого Combobox-а, а чтобы был один Items на все Combobox-ы


 
Sam Stone   (2003-04-10 21:56) [3]

Если один, то используй последний вариант. При событии DropDown грузи в sender"овский объект этот самый MyList.

На мой взгляд, ничего проще нет.


 
panov   (2003-04-10 22:00) [4]

1. Строки записываем в ini-файл.
2. Для каждой формы в OnCreate в цикле проходим по компонентам на форме, для ComboBox устанавливаем
.Items.Clear;
.Itebs.AddStrings(<секция из ini-файла>);
Combobox.Text := Combobox.Items[0];


 
den_c   (2003-04-10 22:16) [5]

>Sam Stone
Проблемма в нерациональности - при каждом DropDown мы будем грузить в Items наш MyList, хотя это требуется лишь тогда когда MyList изменился. А пока он не изменен нет никакой необходимости изменять Items combobox-а.
Можно конечно каким-то образом вести учет необходимости обновления combobox-а, но вопрос можно ли сделать так чтобы все combobox-ы (их Items) на самом деле указывали на один список, что-то наподобие @Combobox1.Items := @MyList - вот только такой код не работает.


 
Sam Stone   (2003-04-10 22:21) [6]


> требуется лишь тогда когда MyList изменился.

А события никакого нет у компонента с TStrings возникающего при его(списка строк) изменении?


 
den_c   (2003-04-10 22:42) [7]

Есть TStringList.OnChange, а толку?

Тут надо чтобы combobox-ы брали значения Items из общего списка, а не общий список обновлял их Items


 
NA   (2003-04-10 23:01) [8]


> > требуется лишь тогда когда MyList изменился.
> А события никакого нет у компонента с TStrings возникающего
> при его(списка строк) изменении?


А OnChange Джордж Буш отменил вопроеки ООН? :)))


 
NA   (2003-04-10 23:04) [9]

чччерт, пока добрался до отправки страницы - опоздал :)))


> den_c (10.04.03 22:42)
> Есть TStringList.OnChange, а толку?
>
> Тут надо чтобы combobox-ы брали


А разница? Берут или дают - минет он и есть минет (сорри за грубость :))))



 
Sam Stone   (2003-04-10 23:08) [10]


> Тут надо чтобы combobox-ы брали значения Items из общего
> списка, а не общий список обновлял их Items

Чета ничего не пойму. Тебе надо, чтобы при добавлении в MyList строк они добавлялись в комбы? Если так, то и юзай TStringList.OnChange, а в него пропиши добаление этих же строк в комбы. То есть по этому событию комбобоксы будут обновлять свои items.



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

Форум: "Основная";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
3-67157
anton2v
2003-04-01 16:29
2003.04.21
Не работает DBComboBox


1-67381
OlegM
2003-04-10 09:57
2003.04.21
Как любой файл просмотреть в hex


14-67557
Sergqwe
2003-04-04 16:03
2003.04.21
Тупой вопрос!


3-67102
DDP
2003-04-02 14:54
2003.04.21
Delphi+ADO+Fox


6-67407
Reals
2003-02-25 19:46
2003.04.21
Клиент новостей (NNTP). Как читать русский текст (кирилицу).





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский