Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2012, 07:42   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
Вопрос MDI в Delphi XE

Добрый день! Делаю MDI приложение. Form1 - MDI-главная форма программы. Form4 - дочерняя MDI-форма Form1. Form4 убрал из списка автосоздаваемых через Project-Options-Forms. На Form4 расположены 2 текстовых поля, в которые вводится логин и пароль для подключения к базе данных. Когда данные введены, то, нажимая на кнопку, должна вызваться функция подключения к базе, расположенная на Form1. Дочерняя MDI-Form4 прекрасно создается с помощью кода:
Код:
procedure TForm1.sBitBtn1Click(Sender: TObject);
var
 Form4: TForm4;
begin
 Form4:=TForm4.Create(Application);
end;
У Form4 в событии Form4.Close написано
Код:
Form4.Free;
Теперь не получается на Form4 вызвать функцию, расположенную в Form1. Выдается ошибка про EAccessViolation. Что собственно говоря делать в этой ситуации?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 14.03.2012, 11:14   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Я думаю, что неправильный подход использован. Это видно по использованию локальной (!) переменной, объявленной в методе главной формы, в методе дочерней формы.
По идее, у Вас в модуле дочерней формы объявлено var Form4: TForm4; поэтому компилятор не говорит об ошибках (переменные разные, но Вы считаете , что они одинаковые), ведь формально всё верно, но в методе дочерней формы ссылка Form4 есть nil.

Решение - убрать вообще из методов дочерней формы ссылку Form4 оставляя просто имена вызовов (т.е. заменить Form4.Free; на просто Free; ), ну и до кучи убрать её из var модуля.

Более рационально пересмотреть логику в сторону фабрики дочерних форм, но это уже другая песня.
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MDI (Delphi) VadEr Помощь студентам 6 30.04.2011 18:12
MDI (Delphi) ASPknopixx Помощь студентам 3 03.04.2011 16:54
Передача параметра с MDI родителя в MDI child через DLL ByXalkin Общие вопросы Delphi 0 15.12.2009 17:21
Delphi. MDI HoLToFF Фриланс 1 31.05.2009 07:40