Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.24;
Скачать: CL | DM;

Вниз

Access Violation в MDI-приложении   Найти похожие ветки 

 
and_sp   (2003-02-13 13:09) [0]

Уважаемые МАСТЕРА!
Такая ошибка: Access violation при передачи данных из одной
MDIChildForm в другую... Когда был SDI всё работало. В чем ошибка?
Перестали работать простейшие операторы
присваивания из одной формы в другую. При передачи данных формы
активны... ничего не понимаю. Причем это происходит при любых попытках в проекте передать данные из формы в форму... Что делать???
Помогите!!!


 
Паша ©   (2003-02-13 13:18) [1]

Как передаешь данные? Скорее всего, переменная, к которой обращаешься, = nil или там мусор.


 
smok_er   (2003-02-13 13:57) [2]

Код в студию!


 
and_sp   (2003-02-13 16:05) [3]

Привожу код в "студию"
Есть три формы:
Form1 - MDIForm
Form2 - MDIChild
Form3 - MDIChild
Причем Form3 вызывается из Form2. На Form2 ставлю Label1 и Button1 которая вызывает Form3 а на Form3 ставлю кнопку в обработчик которой пишу:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Label1.Caption:="Почему не работает?";
end;
Form2 и Form3 создаю следующим образом:
procedure Form1.Button1Click(Sender: TObject);
var Form2:TForm2;
begin
Form2:=TForm2.create(Application);
Form2.Show;
end;


 
Паша ©   (2003-02-13 17:41) [4]

>на Form3 ставлю кнопку в обработчик которой пишу:procedure TForm1.Button1Click(Sender: TObject); ???
может TForm3.Button1Click(Sender: TObject); ?

посмотри в отладчике, что сидит в Form2.Label1.Caption
или Form2 или Form2.Label1 не инициализированны.

Не совсем понятно. Form2 и Form3 создаются из Form1?

procedure Form1.Button1Click(Sender: TObject);
var Form2:TForm2; // -это локальеая переменная
begin

и тогда глобальная из unit2.pas -> Form2 = nil. ИМХО


 
smok_er   (2003-02-13 17:49) [5]

Ты уверен, что в момент Form2.Label1.Caption:="Почему не работает?" у тебя создана форма?
и еще...
что-то подозрительно у тебя объявлена форма Form2 и Form3...
внутри процедуры...


 
smok_er   (2003-02-13 17:51) [6]

:)
Начал отвечать, срочно вызвали по работе, пришел, ответил :)


 
and_sp   (2003-02-14 12:37) [7]

Вот нашел решение:
Обращаюсь через родительскую форму...
TLabel(Application.MainForm.MDIChildren[1].FindComponent("Label1")).Caption:="Почему не работает";


 
Игорь Шевченко ©   (2003-02-14 13:38) [8]

and_sp (14.02.03 12:37)

Криво до безобразия.
Ни одной проверки на ошибки, нет гарантии, что MDIChildren[1] будет именно формой, содержащей компонент Label1.

if Application.MainForm.MDIChildren[1] is TForm2 then
TLabel(Application.MainForm.MDIChildren[1].FindComponent("Label1")).Caption:="Почему не работает";



 
smok_er   (2003-02-14 15:42) [9]

Игорь Шевченко © (14.02.03 13:38)

Сильно громоздко.
А вот компактный вариант:

if Application.MainForm.MDIChildren[1] is TForm2 then
(Application.MainForm.MDIChildren[1] as TForm2).Label1.Caption:="Почему не работает";



Страницы: 1 вся ветка

Текущий архив: 2003.02.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
1-75976
V-Isa
2003-02-12 16:52
2003.02.24
StringGrid


14-76093
Victor72
2003-02-08 13:23
2003.02.24
Удаленная работа для программиста


1-75902
Ihtiandr
2003-02-12 12:41
2003.02.24
Отладка


14-76156
алексей008
2003-02-07 21:19
2003.02.24
вирус


3-75751
denis24
2003-02-05 13:11
2003.02.24
выставление активного индекса