| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Как узнать, что Stringlist был создан |
| Автор: MadCoder 10.5.2008, 22:59 |
| Здравствуйте! Всем известно, что перед работой со StringList'ом его необходимо создать (List:=TStringlist.Create). А как проверить, что Stringlist был создан и с ним можно работать? |
| Автор: THandle 10.5.2008, 23:02 | ||
? Добавлено @ 23:03 http://forum.vingrad.ru/forum/topic-209296/kw-forms-form-%D1%84%D0%BE%D1%80%D0%BC%D0%B0.html Какая разница? Что форма, что StringList... |
| Автор: Albinos_x 10.5.2008, 23:36 |
| Poseidon, хм... может у него глобальная переменная и работа с нескольких обработчиков, которые независимы друг от друга, поэтому и трубуется проверка... |
| Автор: Poseidon 11.5.2008, 00:19 | ||
|
| Автор: ama_kid 11.5.2008, 13:52 | ||||
|
| Автор: Poseidon 11.5.2008, 15:05 |
| Я конечно извеняюсь, но твой любимый метод - извращение. Создавать специально ошибку и потом ее отлавливать... |
| Автор: ama_kid 11.5.2008, 15:21 |
| совершенно верно, это мой любимый извращенный метод |
| Автор: MetalFan 12.5.2008, 08:23 |
...который может привести к непредсказуемым последствиям. проверка на assigned не всегда применим. это относится к локальным и неинициализироваемым глобальным переменным. глобальные переменные - зло) |
| Автор: Sanchezzz 12.5.2008, 08:35 |
| Автору совет не используй все в глобальных пользуйся public или private сделай функцию проверки создан ли Stringlist тем же самым assigned не знаю я не когда не проверяю создан ли Stringlist просто тупо использую ибо всегда создается а при необходимости уничтожаю. |
| Автор: pseud 12.5.2008, 09:47 | ||||||
простите в OnCreate какого класса? Добавлено через 5 минут и 32 секунды
пример
к сожалению StringList1 не создастся и StringList1.Add вызовет Exception никто не знает в каком месте случится Исключительная ситуация. Добавлено через 7 минут и 2 секунды надо уничтожать не при необходимости, а обязательно. и если это локальная переменная (свойство) то желательно в деструкторе класса (если нет другой необходимости) |
| Автор: MadCoder 12.5.2008, 10:04 |
| В зависимости от некоторых данных создается и загружается либо Форма 1, либо Форма 2. В форме 1 создается TStringlist, который заполняется данными. Форма 2 может создаваться как из формы 1, так и независимо (без создания Формы 1). В зависимости от того, есть ли данные в StringList'е, форма 2 читает данные из него, либо выполняет другие действия. Сейчас это реализовано с помощью try... except, что лично мне кажется пальцем, которым затыкают дырку, вместо того, чтобы залатать ее заплаткой. Лучший вариант по моему скромному мнению Assigned, всем спасибо за помощь! |
| Автор: Poseidon 12.5.2008, 10:17 |
| TForm Вообще, как уже было сказано, глобальные переменные - не хороший тон. Но если все же уже созданы, то создаем Stringlist в TForm.OnCreate, освобождаем в TForm.OnDestroy. Да, может получится так, что память будет занята бестолку. Но зато мы не получим ошибок. А вообще я не представляю себе ситуацию, в которой необходимо проверять создан-ли список или нет. |
| Автор: pseud 12.5.2008, 14:24 | ||||
думаю правильнее будет сказать: создаем в конструкторе, освобождаем в деструкторе не всяк класс имеет OnCreate/OnDestroy
я ее простовато но описал в предыдущем своем посте |
| Автор: Poseidon 12.5.2008, 15:09 | ||
В предыдущем твоем посте ошибка в самом коде. Написал бы так:
ничего бы не было. |
| Автор: pseud 12.5.2008, 15:19 | ||||||
это была не ошибка а частный случай, который не подразумевал твоей обертки. безусловно ты говоришь правильно. это безупречная конструкция:
но пример я все таки приведу, где нам понадобится Assigned чтобы ты не говорил
|
| Автор: Poseidon 12.5.2008, 15:57 |
| Приведи еще пример вызова приведенной функции, и я тебе покажу что без проверки можно обойтись |
| Автор: MadCoder 12.5.2008, 16:03 | ||
В том то и дело, что мне не нужно создавать TStringlist, если он не создан, мне нужно определить, был ли он создан. |
| Автор: Poseidon 12.5.2008, 16:17 | ||
А вообще, думаю, суть вопроса раскрыта. Спрашивалось "Как", ответили что через Assigned. Рациональность этого способа - это уже другая тема. |
| Автор: MadCoder 12.5.2008, 16:23 | ||||
Зачем я написал выше. Как в этом случае можно заранее знать, был ли он создан или нет? |
| Автор: THandle 12.5.2008, 16:28 | ||
| Народ, что спорить то? Хочется человеку проверять - пусть проверяет на здоровье. Ответ был дан в 1 посте. ЗЫ: сам всегда пользуюсь конструкцией вида:
|
| Автор: pseud 13.5.2008, 09:29 | ||
Poseidon, я ж привел 2й пример. какой ты упорный. тебе не нравится именно Assigned? ну можно написать
Poseidon, THandle, ну есть свойство в классе кочующее от предка к наследнику, от наследника к наследнику_наследника и наследник_наследника хочет знать в каком-то методе, не очистил ли наследник (допустим написанный другим прогером) это свойство. (третий пример) |