2 / 2 / 6
Регистрация: 11.06.2013
Сообщений: 170
1

Как обратиться к одному компоненту из найденного массива компонентов?

17.12.2014, 13:21. Показов 2323. Ответов 37
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день,подскажите как обратиться к одному компоненту из найденного массив компонентов.
Для наглядности скину поиск компонентов.
Delphi
1
2
3
4
5
6
7
for i:= ComponentCount - 1 downto 1 do
    if (Components[i] is Tlabel)  then
       begin
    n:=n+1;
        ADOQuery1.Refresh;
   AdoQuery1.Locate('что то с базы',n,[]);
   label1.caption:=ADOQuery1.FieldValues['что то с базы'];
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.12.2014, 13:21
Ответы с готовыми решениями:

Как обратиться к компоненту на другой форме
Как сделать чтобы формы "видели" друг друга? То есть есть комбобокс на одной форме, а код пишу к...

Как из одной формы обратиться к компоненту из другой?
У меня есть несколько форм, мне необходимо, чтобы при нажатии на кнопку из первой формы выполнялся...

Как обратиться к компоненту canvas на MainForm из другого класса
Помогите пожалуйста. Пишу WPF приложение. Имеется главное окно MainWindow, на котором расположен...

Как обратиться к компоненту форму, зная хендл ее окна?
Знаю HWND...формы. TForm *f; HWND *h=f->Handle; Как обратиться к форме и её компоненту по...

37
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
17.12.2014, 14:53 2
Delphi
1
TLabel(Components[i]).Caption := ..
0
2 / 2 / 6
Регистрация: 11.06.2013
Сообщений: 170
17.12.2014, 14:58  [ТС] 3
mss, все равно меняет все значения.
даже не так,меняет на значение в последнем элементе.
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
17.12.2014, 15:00 4
Цитата Сообщение от Виктория1992 Посмотреть сообщение
меняет на значение в последнем элементе
Не в последнем, а в i-ом
0
2 / 2 / 6
Регистрация: 11.06.2013
Сообщений: 170
17.12.2014, 15:01  [ТС] 5
mss, только так как ты написал ,сделала и пишет значения одни и те же

Добавлено через 42 секунды
я понимаю ,что в и-ом не ,меняет на одни и те же значения
0
2 / 2 / 6
Регистрация: 11.06.2013
Сообщений: 170
17.12.2014, 15:10  [ТС] 6
для наглядности
Изображения
  
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
17.12.2014, 15:13 7
Значит у тебя ошибка в программе
0
2 / 2 / 6
Регистрация: 11.06.2013
Сообщений: 170
17.12.2014, 15:20  [ТС] 8
mss,
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.Timer1Timer(Sender: TObject);
var
  i,n:integer;
begin
    { for i:=1 to  ComponentCount do               }
  for i:= ComponentCount - 1 downto 1 do
    if (Components[i] is TiSevenSegmentAnalog)  then
       begin
    n:=n+1;
       ADOQuery1.Refresh;
   AdoQuery1.Locate('id',n,[]);
   TiSevenSegmentAnalog(Components[i]).Value:=ADOQuery1.FieldValues['Value'];
end;
end;
end.
что именно?
вот текст query
SQL
1
SELECT * FROM custom
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
17.12.2014, 15:32 9
Ну и чему же тут удивляться ?

Всем им ты своими же руками присвоил одно и то же значение:

Delphi
1
ADOQuery1.FieldValues['Value'];
Где инициализация переменной n при первом к ней обращении ?
0
2 / 2 / 6
Регистрация: 11.06.2013
Сообщений: 170
17.12.2014, 15:47  [ТС] 10
mss, Но я же делаю поиск по id
Delphi
1
AdoQuery1.Locate('id',n,[]);
т.е следуя из сортировки этой выводит значение соответствующие ид 1 2 3 и т.д,
разве нет?

n изначально 0.
в коде думаю не обязательно это писать.
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
17.12.2014, 15:51 11
Цитата Сообщение от Виктория1992 Посмотреть сообщение
n изначально 0.
Это с какого же перепугу ?
Никто тебе такой гарантии не дает и дать не может, поскольку n у тебя локальная переменная.
Об инициализации лок.переменных generic-типов ты должен заботиться сам !
А ты не позаботился, потому и грабли)
0
2 / 2 / 6
Регистрация: 11.06.2013
Сообщений: 170
17.12.2014, 16:31  [ТС] 12
mss, перебрала граблями весь код и разобралась ))
и дело не в переменной n
но все равно спасибо за помощь

Добавлено через 10 минут
mss, вопросик появился, не ответишь ,пожалуйста ?
Delphi
1
AdoQuery1.Locate('id',n,[]);
в данном случаи программа не знает по какому полю отсекать в таблице значения, сейчас я задаю сама это значение.
как сделать чтоб программа сама знала куда какой элемент записать.
т.е на форме может быть 10,20,30 и т.д динамических элементов,разных типов.
лейб 20 21 едит и т.п
например :
вот записать нужно в 20 лейб допустим 50 поле из таблицы , и всегда уже только 50 поле записывать.

чтоб не писать для каждого лейбла свои значения.
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
17.12.2014, 16:31 13
Цитата Сообщение от Виктория1992 Посмотреть сообщение
дело не в переменной n
Ты сказки-то не рассказывай)

при самом первом выполнении этой строчки
Delphi
1
n := n + 1;
чему, по-твоему, равно значение n ?
И на основании чего у тебя эта уверенность ?
0
2 / 2 / 6
Регистрация: 11.06.2013
Сообщений: 170
18.12.2014, 07:43  [ТС] 14
mss, на основании этого
при выполнении
Delphi
1
2
3
 for i:= ComponentCount - 1 downto 1 do
    if (Components[i] is TiSevenSegmentAnalog)  then
       begin
Миниатюры
Как обратиться к одному компоненту из найденного массива компонентов?  
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
18.12.2014, 08:22 15
Цитата Сообщение от Виктория1992 Посмотреть сообщение
на основании этого
Неверное умозаключение.
Нельзя верить звездам, потому что сегодня они удачно сложились)

Вчера фортуна повернулась к тебе боком, а завтра повернется задом - n по ее капризу не была (и не обязана быть) равной нулю, потому и "пишет значения одни и те же".

Нулем в Делфи инициализируются только статические переменные и поля экземпляров классов при их создании.
Локальные же переменнные имеют неопределенное состояние, за исключением переменных, хранящих данные типов с управляемым компилятором временем жизни - длинные строки, дин.массивы, интерфейсы.
0
2 / 2 / 6
Регистрация: 11.06.2013
Сообщений: 170
18.12.2014, 10:18  [ТС] 16
mss, реально, дело было не в переменной n.
Ее сейчас вообще нет)
0
2 / 2 / 6
Регистрация: 11.06.2013
Сообщений: 170
18.12.2014, 10:30  [ТС] 17
подскажите еще как настроить left и топ,чтоб динамически созданные элементы отображались так
Миниатюры
Как обратиться к одному компоненту из найденного массива компонентов?  
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
18.12.2014, 10:39 18
Цитата Сообщение от Виктория1992 Посмотреть сообщение
дело было не в переменной n.
Ее сейчас вообще нет)
Еще раз повторяю - не рассказывай сказки)
В оригинальном приведенном тобой коде она была и косяк был как минимум в ней.

Ну а на нет и разговора нет. Что мы тут трем из пустого в порожнее ?)
0
842 / 737 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
18.12.2014, 10:42 19
Виктория1992,
подскажите еще как настроить left и топ,чтоб динамически созданные элементы отображались так
Ты же их в цикле создаеш?
Вот переменную цикла I и умножай на число например на 200 и прописывай его в свойстве left и топ или просто left, а для топ другое число используй.

Добавлено через 2 минуты
Да там была у нее ошибка в переменной n, я тоже заметил, просто она хочет видимо сказать там много было ошибок и какая именно из них повлияла на неблагополучный ход событий - она незнает.
0
2 / 2 / 6
Регистрация: 11.06.2013
Сообщений: 170
18.12.2014, 12:21  [ТС] 20
NIKOLAYY, ты прав, реальная ошибка была не в переменной n.
я от нее вообще избавилась.сделала немного умнее.

я так и делаю,умножаю left и топ на переменную цикла ,но получается не то,что нужно )
Миниатюры
Как обратиться к одному компоненту из найденного массива компонентов?  
0
18.12.2014, 12:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.12.2014, 12:21
Помогаю со студенческими работами здесь

Как не позволить получить фокус ни одному компоненту загружаемой формы?
Всем здравствуйте. На форме три окна редактирования. При загрузке одно из них получает фокус....

Как обратиться к одному элементу string?
String ^primer; primer="Купить"; Как обратиться к букве "п"?

Как обратиться к одному скрипту из другого?
Монстрик получает урон, но в тело он получает 3 урона, в голову 5.... в руку 1 урон. На каждой...

Как обратиться к одному из несколько динамически созданных PictureBox
Вот мой код, как при нажатии button1 добраться до любого piictureBox??? Например ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru