Форум: "Основная";
Текущий архив: 2003.02.24;
Скачать: [xml.tar.bz2];
Вниз
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c