| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Обращение к динамически созданным объектам Delphi |
| Автор: Arinna 15.8.2011, 19:55 |
| Здравствуйте! Я динамически на Form1 создаю вкладки TabSheet и на каждой из них таблицы StringGrid. Нужно заполнять эти таблицы данными из Form2, или из Form3 и т.д (пользователь сам выбирает). Как мне в каждой форме обращаться к динамически созданному StringGrid? |
| Автор: Frees 15.8.2011, 20:04 |
| а ты сслки на созданные объекты сохраняй... в TList например, или можно FindWindow использовать |
| Автор: Arinna 15.8.2011, 20:10 |
| А можно так? S:=TStringGrid(Form1.FindComponent('StringGrid1')); S.Cells[0,1]:='1'; но тут ошибка... Вы не подскажете как правильно будет? А то я с ссылками что то не поняла... |
| Автор: Frees 15.8.2011, 20:15 |
| А при создании компонентов вы какое имя им давали?, его и пишите в FindControl |
| Автор: Arinna 15.8.2011, 20:24 | ||
Там на этой форме есть StringGrid1.
Вот... Я просто первый раз работаю с динамическими объектами... И вообще ничего не знаю... Я не правильно обращаюсь? Как надо написать? Куда писать FindControl? Я не поняла) |
| Автор: northener 15.8.2011, 20:36 | ||
Замените на
|
| Автор: Arinna 15.8.2011, 20:39 |
| Если я так сделаю, то таблица будет на форме, а не на вкладках. Я уже так делала) Получалась одна таблица. |
| Автор: maniaks1 15.8.2011, 20:43 | ||
| Лучше всего в данной ситуации создать наследника от TabSheet с StringGrid. Т.е. у каждой вкладки будет свой StringGrid Таким образом всё становится очень просто: Допустим наш клас TMyTabSheet перебираем все, находим нужный по заголовку или по тегу (присваиваем заранее)
Не забываем о создании StringGrid про создании вкладки и удалении, при удалении вкладки. Если надо могу подкинуть пример. |
| Автор: Arinna 15.8.2011, 20:45 |
| northener, хотя вроде я сейчас так сделала и получилось... если что, я вернусь))) Спасибо) Добавлено через 1 минуту и 18 секунд maniaks1, если не сложно, то давайте... |
| Автор: northener 15.8.2011, 20:49 |
Тот контрол, на котором будет лежать таблица определяется не владельцем, а родителем и задается в этой строке: |
| Автор: Arinna 15.8.2011, 20:58 | ||||||||
Нет... Для
заработал, а вот
нет почему то...( вообще я создаю по две таблицы на TabSheet. И Когда я исправила на
Выдает ошибку A component named StringGrid2 already exists Вот кусок кода с созданием двух Гридов на вкладке
|
| Автор: maniaks1 15.8.2011, 21:01 | ||||||||
Далее где нужно:
Удаление:
Возможны небольшие ошибки, но смысл думаю понятен. Насчёт поиска вкладок наврал, надо приблизительно так:
|
| Автор: Arinna 15.8.2011, 21:14 | ||
Почему?
Ведь Pagecontrol1.PageCount=2. Тогда Pagecontrol1.PageCount+0=2 и Pagecontrol1.PageCount+1=3... Или я что то не так понимаю?... |
| Автор: northener 15.8.2011, 21:19 |
Извините. Это я ошибся. Значит ошибка где-то в другом месте. |
| Автор: Arinna 15.8.2011, 21:27 | ||||
| Вы меня на мысль навели... Спасибо!!! я исправила чуть и заработало)))) Вот исправленный код. Вдруг кому поможет...
И обращаюсь вот так
|
| Автор: northener 15.8.2011, 23:37 | ||||
Счастлив что хоть чем-то помог. Не могу только понять зачем нужно
Ну да это и не мое дело. |
| Автор: CodeMonkey 16.8.2011, 01:45 |
| Немного поздно, но рекомендую почитать на досуге: http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=342 |
| Автор: Arinna 16.8.2011, 09:06 | ||||
northener, Вы правы. Вместо
Нужно оставить просто
|
| Автор: Arinna 16.8.2011, 10:42 |
| CodeMonkey, спасибо за ссылку.) Мне это еще пригодится) |