Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 26.01.2013
Сообщений: 20
1

Ошибка при работе с ComboBox при использовании FindComponent

24.11.2014, 19:07. Показов 882. Ответов 6
Метки нет (Все метки)

Есть комбобокс, список в него загружается из стринггрида. Потом по выбранному значению в комбобоксе лабелю присваивается соответствующее значение. Т.е. Аналог функции ВПР в экселе.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  
with StringGrid_Oros do begin //таблица
for j:=0 to Rowcount-1 do //проход по строкам
IF ComboBox_Oros_T1.ItemIndex <>-1 THEN //Если значение комбобокса не пустое
    If ComboBox_Oros_T1.Text =Cells[0,j] THEN //если выбранное значение в комбобоксе равно одному из значений в 0 столбце
   Label_K_oros_T1.Caption :=Cells[1,j]; //присвоить значение в этой же строке но из столбца 1
end;
 
// with StringGrid_Oros do begin
//for j:=0 to Rowcount-1 do
//IF TComboBox(FindComponent('ComboBox_Oros_T'+IntToStr(Thk))).ItemIndex <>-1 THEN
//   If TComboBox(FindComponent('ComboBox_Oros_T'+IntToStr(Thk))).Text =Cells[0,j] THEN
//   TLabel(FindComponent('Label_K_oros_T'+IntToStr(Thk))).Caption :=Cells[1,j]; 
//end;
Два куска кода в принципе вроде аналогичны, обращение к компонентам только разное, но тот кусок который закомментирован при работе выдаёт стабильную ошибку
Ошибка при работе с ComboBox при использовании FindComponent
, а который незакомментирован работает на ура. Значение (Thk) ранее присвоено однозначно, далее код с использованием такого обращения к компонентам строк на 1000 без проблем работает. Загнать в комбобокс значения из стринггрида с использованием FindComponent тоже не получается, та же ошибка. Без этого универсального обращения код шибко вырасти грозится, чего очень не хотелось бы, надо будет в 20 разных местах по новой эту процедуру сотворить (т.е. имена все ComboBox_Oros_T1...20,Label_K_oros_T1...20). Может комбобокс такого обращения не понимает? Или чего ещё намудрил...?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.11.2014, 19:07
Ответы с готовыми решениями:

Ошибка при использовании ADODB.CONNECTION при работе с dbf-файлом
Добрый день! Написала макрос с использованием adodb.connection. макрос удаляет строки из файла dbf....

Ошибка object required при работе с ComboBox
Доброго времени суток, есть программа, где идет поиск по запросу, т.е. выбирается лист в comboBox и...

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

Ошибка при получении данных из БД при использовании MVC framework 4.0
// HomeControlers.cs using System; using System.Collections.Generic; using System.Linq; using...

6
Модератор
3476 / 2600 / 740
Регистрация: 19.09.2012
Сообщений: 7,966
24.11.2014, 19:16 2
Добавь везде перед FindComponent имя формы или with убери.
0
1 / 1 / 0
Регистрация: 26.01.2013
Сообщений: 20
24.11.2014, 19:38  [ТС] 3
Добавить имя формы не вариант думаю, т.к. это шаблон формы, форм создаётся несколько из одной, соответственно и имена разные...
Это как with убрать? просто удалить не получается, компилятор сразу на её отсутствие ругается.

Добавлено через 11 минут
У меня формы как Section[i] создаются, поставил это перед FindComponent, вроде на разных созданных формах по разному работает, не перекрывает.
А почему так то? с остальными компонентами без проблем работает, а с ComboBox не хочет, странно как то.

Добавлено через 3 минуты
Не помогло, ошибка ушла но при открытии форм работает переключение только на последней открытой (созданной), на ранее открытой перестаёт работать, висит ранее выбранное значение без изменений и всё.
0
Модератор
3476 / 2600 / 740
Регистрация: 19.09.2012
Сообщений: 7,966
24.11.2014, 19:42 4
Цитата Сообщение от FlintFD Посмотреть сообщение
Это как with убрать?
Всю конструкцию убрать (with ... do) и написать: StringGrid_Oros.Rowcount и т.д.

Цитата Сообщение от FlintFD Посмотреть сообщение
У меня формы как Section[i]
Тогда можно попробовать так: Self.FindComponent
0
1 / 1 / 0
Регистрация: 26.01.2013
Сообщений: 20
24.11.2014, 19:54  [ТС] 5
Спасибо, с Self.FindComponent помогло, стало всё в каждой форме независимо присваиваться.
Цитата Сообщение от FIL Посмотреть сообщение
и написать: StringGrid_Oros.Rowcount и т.д.
Не вполне дошло, недавно с Делфи общаюсь, можно чуть подробней? думаю пригодится.
А то налепил в программе циклов, код строк 50 получился, красота... но при тестировании полной программы расчёт на минуты полторы затягивался... пришлось уходить от циклов практически, код строк на 500 разстянулся, но зато работает быстро .
0
Модератор
3476 / 2600 / 740
Регистрация: 19.09.2012
Сообщений: 7,966
24.11.2014, 20:05 6
Цитата Сообщение от FlintFD Посмотреть сообщение
можно чуть подробней?
Компилятор считает, что все свойства и методы внутри конструкции:
Delphi
1
2
3
4
with SomeComponent do
begin
...
end;
относятся к SomeComponent (если они у него есть).
Поэтому, когда ты пишешь там FindComponent, компилятор воспринимает это как StringGrid_Oros.FindComponent.
Чтобы этого избежать, надо явно указывать кому пренадлежит данный метод.
1
1 / 1 / 0
Регистрация: 26.01.2013
Сообщений: 20
24.11.2014, 20:16  [ТС] 7
Частично дошло, я пытался менять несуществующие свойства StringGrid_Oros. Вот где собака покопалась, в паре случаев при попытке работы со StringGrid тоже начиналась чехарда, решил вопрос отказом от StringGrid, функции написал. Впреть в этом вопросе буду чуть умней.
Ещё раз спасибо.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.11.2014, 20:16

При использовании кода в модуле ошибка при открытии файла
есть такой простенький код, которій отлично работает в скрипте *.pl use Cwd; my $cwd =...

Ошибка при использовании openfilename: Нарушение прав доступа при записи по адресу
Здравствуйте, подскажите: При использовании кода (слева), после выбора файла, возникает ошибка...

Аппаратная ошибка видео (Ошибка при работе с видеоустройствами привела к некорректной работе Windows).
Аппаратная ошибка видео. Последнее время во время игры Call of Duty: Modern Warfare 2 в...

Ошибка при использовании CDONTS при отправке почты
Помогите, пожалуйста, решить такую проблему. При создании объекта CDONTS.NewMail выдается...

Ошибка при сохранении данных в БД при использовании bindingnavigator
Добрый день. Подскажите, куда копать? Есть форма, где в зависимости от выбранного значения combobox...

Различия в использовании seekg и seekp при работе с fstream
Если я использую класс fstream, тогда для перемещения внутри файла без разницы какую функцию...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.