Главная страница
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.015 c
14-76110
ZeroDivide
2003-02-06 15:28
2003.02.24
Они что все тупые?


14-76142
Феликс
2003-02-05 22:12
2003.02.24
Зацените проект! Combats.ru просто отдыхает.


3-75822
zks
2003-02-06 12:52
2003.02.24
SQL выборка


8-76045
MAXL
2002-11-10 08:24
2003.02.24
Подкажите, как добраться до буфера зв.карты?


7-76212
izyum
2002-12-20 14:52
2003.02.24
События клавиатуры