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

Вниз

Много 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
14-67472
wnew
2003-04-01 23:36
2003.04.21
Немцы о русском космосе.


4-67649
MorfeyCool
2003-02-20 13:30
2003.04.21
Как контролировать время ?


14-67514
Дмитрий К.К.
2003-04-04 06:20
2003.04.21
Именинники 4 апреля


1-67309
minotavr
2003-04-08 19:01
2003.04.21
Работа с DLL


4-67645
Карлсон
2003-02-24 13:33
2003.04.21
иконка в трее.