![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Модальные формы и видимость глобальных переменных
leonidus © (2008-07-14 15:36:00)Столкнулся со странной проблемой, в главной форме приложения описана глобальная переменная: Photos_FileList:tstrings, она используется и в других формах проекта. Так вот если другая форма (например Unit2) вызвана из главной методом Show то я не могу обратиться к переменной Photos_FileList в модуле Unit2 т.к. получаю при этом AV, но стоит мне вызвать Unit2 через ShowModal как доступ появляется. Во-первых хотелось бы понять причину такого поведения, а во вторых меня просто не устраивает вызов через ShowModal, т.к. в этом случае вызывающая форма остается на экране а мне надо ее закрыть и открыть Unit2.
Плохиш (2008-07-14 16:44:00) [1]
> Поросенок Винни-Пух © (14.07.08 16:41) [11]
> Гораздо интереснее где написано Free
Для получения битой ссылки, Free писать не обязательно...
Поросенок Винни-Пух (2008-07-14 16:44:00) [2]То есть там у него так и есть как протелепатировано в [4]
Поросенок Винни-Пух (2008-07-14 16:43:00) [3]А вот кстати и разгадка:
а во вторых меня просто не устраивает вызов через ShowModal, т.к. в этом случае вызывающая форма остается на экране а мне надо ее закрыть и открыть Unit2.
Поросенок Винни-Пух (2008-07-14 16:41:00) [4]Гораздо интереснее где написано Free
icWasya (2008-07-14 16:40:00) [5]а где написан
Photos_FileList:=TstringList.Create;
Anatoly Podgoretsky (2008-07-14 16:12:00) [6]
> у тебя ошибка в программе
Одназначно, но не только там.
Плохиш (2008-07-14 15:59:00) [7]Хм, выделение не правильно сделал, да и пофик...
Плохиш (2008-07-14 15:57:00) [8]
> leonidus (14.07.08 15:54) [5]
> Плохиш, методPhotos_FileList. Freeвообще нигде не используется
Что ж не удивительно, что не программа, а сплошной глюкодром...
PS. У тебя ошибка в 17й строке.
Поросенок Винни-Пух (2008-07-14 15:54:00) [9]фик знает что там у тебя наваяно. вот одна из версий:
list := TstringList.Create;
Form2.Show;
list.free;
list := TstringList.Create;
Form2.ShowModal;
list.free;
В первом случае при обращении в Form2 к списку будет та ерунда, что и у тебя.
Угадай почему.
leonidus (2008-07-14 15:54:00) [10]Плохиш, метод Photos_FileList.Free вообще нигде не используется т.е. Photos_FileList вообще не уничтожается (это я только что заметил и уже исправил, но ошибка осталась.)
Правильный$Вася, не понимаю вас, я и так описал Photos_FileList как переменную в разделе var главной формы.
Поросенок Винни-Пух согласен что не должна такая чисто интерфейсная фишка как модальность давать такие серьезные вещи как AV...
Поросенок Винни-Пух (2008-07-14 15:54:00) [11]у тебя ошибка в программе
Правильный$Вася (2008-07-14 15:42:00) [12]
> главной форме приложения описана глобальная переменная:
> Photos_FileList:tstrings
в форме нет переменных, есть свойства
если же ты опишешь это как переменную, тогда фавкт существования формы не будет иметь значения, и к этойпеременной можно юудет обращаться произвольно
Поросенок Винни-Пух (2008-07-14 15:42:00) [13]> т.к. получаю при этом AV
Это на 100000% никак не связано с модальностью/немодальностью
Плохиш (2008-07-14 15:39:00) [14]
> т.к. получаю при этом AV
> мне надо ее закрыть и открыть Unit2.
Ну значит и не надо ум=ничтожать объект с адресом в Photos_FileList, при закрытии формы...