Форум: "Основная";
Текущий архив: 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