Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
0 / 0 / 1
Регистрация: 17.04.2016
Сообщений: 77
RAD 2009-XE2

Работа с TStringList между разными формами

13.12.2018, 23:30. Показов 4477. Ответов 14

Студворк — интернет-сервис помощи студентам
Коллеги, добрый день,

Есть основная форма, из нее запускается вторая форма, в которой происходит выбор файлов. Список выбранных файлов заносится в FolderName:TStringList. После чего вторая форма закрывается, а основная форма должна обработать список FolderName.
Пробую объявить FolderName, как глобальную переменную прописав ее в основной форме FolderName:TStringList в interface->var. Создать ее FolderName := TStringList.Create при старте основной формы. И далее заполнять ее во второй форме. Но между формами она не видна. Что делаю не так?

В основной форме, примерно, это выглядит вот так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
unit ЕDA_fm;
 
interface
 
uses
  ...
 
type
  TForm1 = class(TForm)
    ...
    procedure FormCreate(Sender: TObject);
    ...
type TMyGrid=class(TCustomGrid);
 private
    { Private declarations }
 public
 end;
 
var
  ...
  FolderName : TStringList;
 
implementation
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
var
  ...
begin
   FolderName := TStringList.Create;
end;
 
end.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.12.2018, 23:30
Ответы с готовыми решениями:

Синхронизация фильтров между формами с одинаковыми заголовками разными наименованиями полей
Здравствуйте! У меня две таблицы. Визуально у неё столбцы одни и те же, но наименования полей разное. Но мне нужно синхронизировать фильтры...

Работа между формами
Всем привет, извиняюсь за глупый вопрос. Есть 2 формы,на первой есть текстбокс,как мне перенести текст вводимый в текстбокс на вторую...

Работа между формами
Добрый день. Подскажите пожалуйста, в чем ошибка или косяк. Суть должна заключаться в следующем, что во 2ой форме должны выводиться...

14
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
13.12.2018, 23:50
чтобы добраться до переменной, надо написать название юнита еще

Delphi
1
Form2.VariableName ...
но я бы так не делал, я бы список создавал в главной программе, передавал бы его второй форме для заполнения только, дальше на первой форме оперируем этими заполненностями и уже после удаляем, так же из первой формы - так получится чистое решение

Добавлено через 7 минут
Цитата Сообщение от Arcor Посмотреть сообщение
Delphi
1
Form2.VariableName ...
или все таки
Delphi
1
Unit2.VariableName
лень дельфи грузить и создавать две формы, для подтверждения правильности
0
Модератор
 Аватар для D1973
9906 / 6443 / 2455
Регистрация: 21.01.2014
Сообщений: 27,351
Записей в блоге: 3
14.12.2018, 06:07
Лучший ответ Сообщение было отмечено krapotkin как решение

Решение

По хорошему обмен данными между формами должен осуществляться с помощью дополнительного модуля, в котором описаны общие переменные, собственные типы, процедуры и функции. Как по мне - не надо делать так, чтобы формы знали друг о друге: это совсем ни к чему. Ну ладно - главная форма: она должна что-то знать о тех дополнительных формах, но только о тех, которые будут из нее вызываться. Но дополнительные формы о главной не должны знать вообще...
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
14.12.2018, 10:46
Цитата Сообщение от D1973 Посмотреть сообщение
По хорошему обмен данными между формами должен осуществляться с помощью дополнительного модуля
ну так из первой формы вызывать вторую то все равно придется, да, второй ничего знать о первой нельзя, первой формой передаем через метод/свойство список, при том же вызове, ну или когда заблагорассудится, вторая форма заполняет переданный список, который передан ТОЛЬКО через метод. Куда, да и зачем тут дополнительный модуль пихать еще между?

вызов в первой форме, типа такого получается
Delphi
1
2
3
4
5
6
7
var SL: TStringList;
...
SL := TStringList.Create;
...
FormXYZ.GetFileList(SL);
...
SL.Free;
сам же метод во второй форме позаботится о том, чтобы организовать эти данные в сюда
Delphi
1
FormXYZ.GetFileList(...);
1
Модератор
 Аватар для D1973
9906 / 6443 / 2455
Регистрация: 21.01.2014
Сообщений: 27,351
Записей в блоге: 3
14.12.2018, 11:51
Цитата Сообщение от Arcor Посмотреть сообщение
зачем тут дополнительный модуль пихать еще между?
А мы его пихнем не "между", а "вместо"... Вместо того, чтобы объявлять СтрингЛист в классе Формы1, в классе Формы2 создавать доп. метод - мы тихо объявим СтрингЛист в модуле, доп. метод обработки СтрингЛиста из Формы2 обзовем процедурой/функцией и тоже утащим его в модуль...
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
14.12.2018, 12:04
Цитата Сообщение от D1973 Посмотреть сообщение
А мы его пихнем не "между", а "вместо"... Вместо того, чтобы объявлять СтрингЛист в классе Формы1, в классе Формы2 создавать доп. метод - мы тихо объявим СтрингЛист в модуле
ага и тем самым наплодим глобальных ненужных, сложноуправляемых переменных? ну круто тогда )) я бы так не делал, создавать объект только там где он нужен, а во всех остальных местах просто тащить его через интерфейс/протокол/ методы/свойства, тем самым не прикручивая ни к чему ничего намертво. Откуда вздумалось, оттуда вызвали всю цепочку с переданным списком и тем самым осуществив полный контроль управления списком. Да, если нам понадобится некоторая структура данных, класс/ список/ который надо в обоих модулях, мы только ЕГО выносим и ЕГО весь функционал, дабы отвязаться от взаимных связей двух модулей, в которых нужны одни данные. НО создавать и инициализировать этот объект ТОЛЬКО на одной стороне, где он в данный момент нужен, там же и удалять. Тогда у нас появится чистое решение
0
Модератор
 Аватар для D1973
9906 / 6443 / 2455
Регистрация: 21.01.2014
Сообщений: 27,351
Записей в блоге: 3
14.12.2018, 13:07
Цитата Сообщение от n1056 Посмотреть сообщение
Список выбранных файлов заносится в FolderName:TStringList. После чего вторая форма закрывается, а основная форма должна обработать список FolderName.
Вот оттолкнемся от выставленного условия: как по мне, основная форма ничего не должна "обрабатывать"... Обрабатывать должна какая-либо процедура/функция. Которую можно безболезненно перенести в отдельный модуль... Отсюда вопрос: а на кой ляд создавать объект в основной форме и потом передавать его в процедуру? Создать его один раз в модуле - и в нем же и использовать: из формы 2 вызывать процедуру сбора файлов в список, из Формы 1 вызывать процедуру обработки полученного списка. И та и другая процедура будут работать с одним и тем же списком файлов, а обе формы будут от него избавлены...
1
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
14.12.2018, 15:26
золотые слова )
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
14.12.2018, 17:28
дак и в моем случае они будут работать с одним набором данных))) просто точка входа будет контролируема из главной формы) а все остальное лишь передача ссылки на созданный список))) я вас не призываю ни к чему, у вас и опыта больше и делаете все правильно, куда с нашими соплями в разговоры взрослых дядек лезть))) но все равно с моей точки зрения, с моим подходом больше контроля, что куда и зачем, да и минусов не вижу в таком методе как бы тоже. Во втором модуле мы просто приписав новую функцию, расширяем стандартный функционал, в этом случае сбор данных. Вы же не пишите новую функцию в отдельном модуле, чтобы изменить ширину или высоту формы, а вызываете уже прописанные методы этому объекту... с таким же успехом можете создать такую функцию в модуле и использовать как вы описываете этот процесс, тогда мы отдаляемся от ООП снова к процедурному стилю программирования))) давайте уже тогда сразу развернем и процедурное программирование на метки, и придем к ассемблерным командам прыганья по меткам)))

Не по теме:

ладно.. пошел я в выходные))) и отмечать новый контракт с космическим агентством, который сегодня подписал)))

возможно, до вечера, Господа

Добавлено через 48 секунд

Не по теме:

Цитата Сообщение от krapotkin Посмотреть сообщение
золотые слова )
списанные с Вашей же записной книжки...)))

0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
14.12.2018, 20:44
мои поздравления )

просто нужно четко и всегда помнить
форма - это то что на экране
данные - это то что "внутри"
если данные хранить в форме, то придется ее за собой всюду таскать
это крайне вредно
а если форма имеет ссылку на данные, которые хранятся где-то еще, то вполне можно решить любую проблему
Цитата Сообщение от Arcor Посмотреть сообщение
контролируема из главной формы)
если нам данные нужны будут в какой-то Form2...Form432 то все они должны держать ссылку на главную форму???
и ни одну из них нельзя будет перетащить в другую программу, потому что они потащат все за собой.
1
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
14.12.2018, 21:42
Цитата Сообщение от krapotkin Посмотреть сообщение
если нам данные нужны будут в какой-то Form2...Form432 то все они должны держать ссылку на главную форму???
и ни одну из них нельзя будет перетащить в другую программу, потому что они потащат все за собой.
походу клинический случай тут массово... ну ля... то и вызывать надо будет из Form2 да хоть из Form12346789 ту форму которая предназначена для того выбора...при чем тут первая форма??? речь идет о той, которая будет заниматься именно данными, а из какой формы мы ее вызовем это уже прогарммер решает и подсовывает нужный контейнер для заполнения....

ваши советы напоминают следующую картину.. сегодня пошел в магазин за молоком - купил молоко уже в продаваемой таре, тара только на выкид, то есть мусор.. уже и мусор в коде ненужный... раньше в советское время ходили за молоком со своей тарой, бутылка была одна, как и тут контейнер один, а что в него насыпят/нальют зависит уже от желания..

вот вы сегодня и программируете с кучей мусора, получается, раз вы советуете создать модуль и В НЕМ создать некий контейнер, а если мне в двух модулях понадобится два разных набора данных? как я буду это чисто использовать? да никак.. через Ж все получится. если я сделаю метод отдельный и в него буду подсовывать разные банки для заполнения, я получу задуманное и чистое решение!

Цитата Сообщение от krapotkin Посмотреть сообщение
просто нужно четко и всегда помнить
ну а сами то мне что тут втираете? видатьс ами не понимаете... вы же сами мне тут про формы.. а не про ООП... ээхх, видать northener был прав, что у кучи формурчан нет понятия что форма это класс..
Цитата Сообщение от Arcor Посмотреть сообщение
просто точка входа будет контролируема из главной формы
не знаю почему вы как профессионал не прочли в этих словах подразумение того, что имеется ввиду главная форма - вызывающая форма.. вызывающий класс.. ээхх

Добавлено через 6 минут

Не по теме:

Цитата Сообщение от Arcor Посмотреть сообщение
не знаю почему вы как профессионал не прочли в этих словах подразумение того, что имеется ввиду главная форма - вызывающая форма.. вызывающий класс.. ээхх
видать профессионалы такие))) ничего личного...

0
Модератор
 Аватар для D1973
9906 / 6443 / 2455
Регистрация: 21.01.2014
Сообщений: 27,351
Записей в блоге: 3
15.12.2018, 08:03
Цитата Сообщение от Arcor Посмотреть сообщение
речь идет о той, которая будет заниматься именно данными
Да почему данными, точнее, их обработкой, должна заниматься форма? Вот чего я не пойму?
Цитата Сообщение от Arcor Посмотреть сообщение
у кучи формурчан нет понятия что форма это класс
Правильно, класс, но класс узкоспециализированный, предназначенный для ввода данных и визуализации из обработки. Мы можем расширить этот класс, чтобы он не только принимал данные и показывал их, но и обрабатывал? Да как 2 пальца... Но зачем? Почему не создать под это дело свой отдельный класс (да, да, в том самом отдельном модуле...)? И использовать методы именно этого, своего класса там, где это необходимо, из методов любого объекта класса TForm, вместо того, чтобы расширять функционал этого конкретного объекта класса TForm, добавляя именно ему дополнительные методы?
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
16.12.2018, 13:13
Цитата Сообщение от D1973 Посмотреть сообщение
Правильно, класс, но класс узкоспециализированный, предназначенный для ввода данных и визуализации из обработки. Мы можем расширить этот класс, чтобы он не только принимал данные и показывал их, но и обрабатывал? Да как 2 пальца... Но зачем? Почему не создать под это дело свой отдельный класс (да, да, в том самом отдельном модуле...)? И использовать методы именно этого, своего класса там, где это необходимо, из методов любого объекта класса TForm, вместо того, чтобы расширять функционал этого конкретного объекта класса TForm, добавляя именно ему дополнительные методы?
изначально проблема моего агроисточника была вот тут))
Цитата Сообщение от D1973 Посмотреть сообщение
А мы его пихнем не "между", а "вместо"... Вместо того, чтобы объявлять СтрингЛист в классе Формы1, в классе Формы2 создавать доп. метод - мы тихо объявим СтрингЛист в модуле, доп. метод обработки СтрингЛиста из Формы2 обзовем процедурой/функцией и тоже утащим его в модуль...
но тема уехала не в ту степь в конце концов, все запутались уже)))

в общем надо
0
Модератор
 Аватар для D1973
9906 / 6443 / 2455
Регистрация: 21.01.2014
Сообщений: 27,351
Записей в блоге: 3
16.12.2018, 13:43
Цитата Сообщение от Arcor Посмотреть сообщение
в общем надо
Не-не-не... Маловато будет!!!
0
0 / 0 / 1
Регистрация: 17.04.2016
Сообщений: 77
16.12.2018, 19:15  [ТС]
Да, все спасибо за развернутые комментарии! Постепенно движемся к НГ, нужно готовиться и разминаться..
Пока сделал черег глобальную переменную.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.12.2018, 19:15
Помогаю со студенческими работами здесь

Работа с БД передача данных между формами
Суть проекта: создать аппликацию которая будет работать с бд, у меня это для бронирования билетов на поезд. что же я сделал: создал форму...

Работа с двумя формами; передача данных между ними
Form1: public List<string> lP1 = new List<string>(); public List<string> lP2 = new List<string>(); public...

База с двумя подчиненными формами на разных вкладках и разными источниками
Добрый день, нужна помощь в решении такой задачи, есть основная форма с подчиненной на вкладке Вкладка31 - здесь все нормально, и...

выпадающий список с разными формами ввода при выборе элемента списка
вкратце: на данный момент имеем: <script type=\'text/javascript\'> <!-- function viewdiv(id) { var...

Зашифровать TStringList, сохранить, прочитать, получить исходный TStringList
Здравствуйте. Требуется решение следующей задачи: Зашифровать TStringList (количество строк может достигать 3-5 тысяч строк),...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru