Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.07.2018, 02:18
TEKTON TEKTON вне форума
Новичок
 
Регистрация: 14.03.2011
Сообщения: 60
Репутация: 10
По умолчанию Загрузка Items*в в несколько ComboBox*ов

Приветствую.
Значит проблема такая:

На форме есть несколько ComboBox*в.
И есть ListBox со значениями.

Мне надо загрузить ComboBox*ам значения из ListBox
Именно весь список значений в каждый ComboBox.

Что б получилось что то типо такого:

Код:
var 
i:integer;
for i :=15 to 25 do
begin
Form1.ComboBox[i].Items:= Form1.ListBox1.Items;
end;
Спасибо.

Последний раз редактировалось TEKTON, 24.07.2018 в 02:48.
Ответить с цитированием
  #2  
Старый 24.07.2018, 03:23
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от TEKTON
Приветствую.
Значит проблема такая:

На форме есть несколько ComboBox*в.
И есть ListBox со значениями.

Мне надо загрузить ComboBox*ам значения из ListBox
Именно весь список значений в каждый ComboBox.

Ну так грузи:
Код:
Form1.ComboBox1.Items.Assign(Form1.ListBox1.Items);
Form1.ComboBox2.Items.Assign(Form1.ListBox1.Items);
...
Ответить с цитированием
  #3  
Старый 24.07.2018, 08:42
TEKTON TEKTON вне форума
Новичок
 
Регистрация: 14.03.2011
Сообщения: 60
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Ну так грузи:
Код:
Form1.ComboBox1.Items.Assign(Form1.ListBox1.Items);
Form1.ComboBox2.Items.Assign(Form1.ListBox1.Items);
...
Это понятно.
Но дело в том, что ComboBox*ов много.
И если каждому присваивать значение, то это целая "простыня" получится.
Работать будет, не спорю.
Но хочется код оптимизировать.

И я хочу в цикле присваивать им индексы
Сделать типо перебора ComboBox*ов (с 15го по 25й)

Код:
Тут цикл
begin
Form1.ComboBox[i].Items.Assign(Form1.ListBox1.Items);
end;

Как сделать конструкцию ComboBox[i] ?

Последний раз редактировалось TEKTON, 24.07.2018 в 08:57.
Ответить с цитированием
  #4  
Старый 24.07.2018, 09:02
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от TEKTON
...хочу в цикле присваивать им индексы
Сделать типо перебора ComboBox*ов (с 15го по 25й)...
Ну, здесь несколько вариантов, если других комбиков нету (с 1го по 14й и с 26го до N), то можно перебором компонентов на форме, примерно так
Код:
for i := 0 to Form1.ComponentCount - 1 do
  if Form1.Components[i] is TComboBox then
     (Form1.Components[i] as TComboBox).Items.Assign(Form1.ListBox1.Items);
а если есть, то тогда поиском,можно так
Код:
for i := 15 to 25 do
  if Form1.FindComponent('ComboBox' + IntToStr(i)) <> nil then
   (Form1.FindComponent('ComboBox' + IntToStr(i)) as TComboBox).Items.Assign(Form1.ListBox1.Items);

Последний раз редактировалось Alegun, 24.07.2018 в 09:12.
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
TEKTON (24.07.2018)
  #5  
Старый 24.07.2018, 09:15
TEKTON TEKTON вне форума
Новичок
 
Регистрация: 14.03.2011
Сообщения: 60
Репутация: 10
По умолчанию

Alegun, спасибо огромное!

Второй вариант то что нужно!
Тему можно прикрыть.
Ответить с цитированием
  #6  
Старый 25.07.2018, 02:35
TEKTON TEKTON вне форума
Новичок
 
Регистрация: 14.03.2011
Сообщения: 60
Репутация: 10
По умолчанию

Погонял программку, но работает не очень коректно.

В ComboBox*сы список загружается, но при клике на кнопке обработчика, данные из ComboBox*а не брабатываются, как буд то ComboBox пустой.
Скорее всего это связано с ItemIndex*ом.

Но если открыть ComboBox и выбрать значение вручную, то всё работает нормально.

Как дополнить цикл, что б программно выбиралось первое значение из ComboBox ?
Короче надо съэмулировать, как будто я открыл ComboBox и выбрал первое значение.

Последний раз редактировалось TEKTON, 25.07.2018 в 08:02.
Ответить с цитированием
  #7  
Старый 25.07.2018, 10:57
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

ComboBox.ItemIndex:=Значение_которое_ты_хочешь
Если нужно первое, то 0.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #8  
Старый 25.07.2018, 12:05
TEKTON TEKTON вне форума
Новичок
 
Регистрация: 14.03.2011
Сообщения: 60
Репутация: 10
По умолчанию

Цитата:
Сообщение от Aristarh Dark
ComboBox.ItemIndex:=Значение_которое_ты_хочешь
Если нужно первое, то 0.
Код естественно не работает и не будет.
Код:
[dcc32 Error] Unit1.pas(763): E2003 Undeclared identifier: 'ComboBox'
Говорит- не знаю я безымянный ComboBox.

Повторю ещё раз вопрос:
Как дополнить цикл который привёл Alegun ?

Цитата:
Сообщение от Alegun
а если есть, то тогда поиском,можно так

Код:
for i := 15 to 25 do
  if Form1.FindComponent('ComboBox' + IntToStr(i)) <> nil then
   (Form1.FindComponent('ComboBox' + IntToStr(i)) as TComboBox).Items.Assign(Form1.ListBox1.Items);
Как сюда дописать этот ComboBox.ItemIndex:=0; ?

Тип такого ?
Код:
for i := 15 to 25 do
  if Form1.FindComponent('ComboBox' + IntToStr(i)) <> nil then
  (Form1.FindComponent('ComboBox' + IntToStr(i)) as TComboBox).Items.Assign(Form1.ListBox1.Items);
  (Form1.FindComponent('ComboBox' + IntToStr(i)) as TComboBox).ItemIndex:=0;
 end;
?
Ответить с цитированием
  #9  
Старый 25.07.2018, 14:53
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 282
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию

Код:
for i := 15 to 25 do
  if Form1.FindComponent('ComboBox' + IntToStr(i)) <> nil then
  (Form1.FindComponent('ComboBox' + IntToStr(i)) as TComboBox).Items.Assign(Form1.ListBox1.Items);
  (Form1.FindComponent('ComboBox' + IntToStr(i)) as TComboBox).ItemIndex:=0;
 end; // тут конец 
есть конец, а где начало?
Ответить с цитированием
  #10  
Старый 25.07.2018, 21:36
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Многовато что-то вызовов функции поиска компонентов за один проход получается, тогда лучше завести переменную типа TComponent, "найти" в неё нужный комбик и работать уже с ним. Ну и соблюдение орфографии и блочных конструкций используемого ЯП
Ответить с цитированием
  #11  
Старый 25.07.2018, 22:11
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от nixon232
Код:
for i := 15 to 25 do
**if Form1.FindComponent('ComboBox' + IntToStr(i)) <> nil then
**(Form1.FindComponent('ComboBox' + IntToStr(i)) as TComboBox).Items.Assign(Form1.ListBox1.Items);
**(Form1.FindComponent('ComboBox' + IntToStr(i)) as TComboBox).ItemIndex:=0;
*end; // тут конец 
есть конец, а где начало?

конец-то конец. Но лучше как-то так:
Код:
var
  I : Integer;
  cb : TComboBox;
begin
  for i := 15 to 25 do
  begin
    cb := TComboBox(Form1.FindComponent('ComboBox' + IntToStr(I)));
   if cb <> Nil Then
    begin
      cb.Items.Assign(Form1.ListBox1.Items);
      cb.ItemIndex := 0;
    end;
  end;
end;
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
TEKTON (27.07.2018)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:32.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter